null: fix NullUUID.Scan returning Valid=true for empty string/bytes#216
Open
c-tonneslan wants to merge 1 commit into
Open
null: fix NullUUID.Scan returning Valid=true for empty string/bytes#216c-tonneslan wants to merge 1 commit into
c-tonneslan wants to merge 1 commit into
Conversation
UUID.Scan treats empty string and empty []byte as a null UUID, returning nil without parsing. NullUUID.Scan saw that nil error and set Valid=true, so callers would get a non-null NullUUID with the zero UUID value. Fix by checking for empty string/bytes before delegating to UUID.Scan, mirroring the same logic, so Valid=false is set for empty input just as it is for an actual nil value. Fixes google#109
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes #109.
UUID.Scantreats an empty string and an empty[]byteas a null UUID, returningnilwithout actually parsing anything. ButNullUUID.Scandidn't check for this case — it just delegated toUUID.Scan, saw the nil error, and setValid = true. So callers would get back a non-nullNullUUIDwrapping the zero UUID value, which is incorrect.The fix mirrors the empty-input check that already exists in
UUID.Scan, so empty string/bytes are treated the same as anilvalue:Valid = false,UUID = uuid.Nil.Added a regression test for both the string and []byte cases.