Bugfix - Invalid call to value method with nil pointer #9
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.
I ran into an issue when using this library when I tried to encode a struct that contained a nil pointer with a custom encoding method (through the
query.Encoder
interface) that had a value type receiver.Due to the way that this library was checking for and asserting the interface on a reflected value, it could end up naïvely calling the interface method on a nil pointer. The only option to circumvent the issue was to instead define the
query.Encoder
interface'sEncodeValues
method with a pointer receiver and check for anil
receiver, but then non-pointers (value types) wouldn't implement the interface and wouldn't call the custom encoding method, which is obviously very limiting.This PR makes simply adds a fail-safe by getting an indirect reflection value of the existing value, checking it's validity, and initializing the pointed with a proper zero value before calling the
EncodeValues
method on it.