Verify type assumptions when retrieving child default values #594
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR fixes the root cause of hashicorp/terraform#32752.
Essentially, when the user passes in a type that cannot be converted into one assumed by the defaults package we would see a panic when attempting to retrieve the children of the mismatch type. For example, if we are attempting to convert a list into an object (which is not possible and what is happening in the original issue) then the defaults package would panic assuming an int type should be a string as that is what the index was expecting.
This PR makes that assumption safe by verifying both the expected type of the key and the cty type expected by the defaults package match. If they don't match, the defaults package will simply not apply the defaults (by returning
nil
from the getChild function, as if there were no defaults to apply). As we expressly tell callers they should attempt to convert from the returned value into the concrete required type, this error would be caught then and handled nicely instead of the panic we see now.