prevent sdk panics in 2 specific cases

Fix 2 specific panics in the sdk when reading nil or computed maps from
various configurations. The legacy sdk code is too dependent on undefined
behavior to attempt to find and fix the root cause at this point.

Since the code is essentially frozen for future development, these
changes are specifically targeted to only prevent panics from within
providers.  Because any code effected by these changes would have
panicked, there cannot be anything depending on the behavior, and these
should be safe to fix.
This commit is contained in:
James Bardin 2019-06-25 14:12:01 -04:00
parent fe11724678
commit cd3ac50ddb
2 changed files with 6 additions and 1 deletions

View File

@ -219,6 +219,9 @@ func (r *ConfigFieldReader) readMap(k string, schema *Schema) (FieldReadResult,
v, _ := r.Config.Get(key)
result[ik] = v
}
case nil:
// the map may have been empty on the configuration, so we leave the
// empty result
default:
panic(fmt.Sprintf("unknown type: %#v", mraw))
}

View File

@ -95,7 +95,9 @@ func (r *DiffFieldReader) readMap(
return FieldReadResult{}, err
}
if source.Exists {
result = source.Value.(map[string]interface{})
// readMap may return a nil value, or an unknown value placeholder in
// some cases, causing the type assertion to panic if we don't assign the ok value
result, _ = source.Value.(map[string]interface{})
resultSet = true
}