UPSTREAM PR #26917: python: fix duplicate proto field detection to use field number instead of JSON name#146
Open
loci-dev wants to merge 1 commit into
Open
UPSTREAM PR #26917: python: fix duplicate proto field detection to use field number instead of JSON name#146loci-dev wants to merge 1 commit into
loci-dev wants to merge 1 commit into
Conversation
…ad of JSON name The _ConvertMessage function tracked seen fields by their raw JSON key string rather than by resolved field identity. Because every proto field with an underscore has two valid JSON representations (snake_case proto name and camelCase json_name), a payload containing both aliases passed the duplicate check undetected — the two strings are different even though they refer to the same field. Fix: compare against field.number instead of the raw key string. Field numbers are unique per message and independent of JSON representation, so both aliases for the same field are correctly detected as a duplicate regardless of the order they appear. This brings the Python implementation into conformance with the proto3 JSON specification which states: "Parsers are required to reject JSON that contains the same field (either by proto field name or by JSON name) more than once." The C++ and Go implementations already handle this correctly.
558f1f4 to
6014f4a
Compare
f292971 to
1fdfb93
Compare
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.
Note
Source pull request: protocolbuffers/protobuf#26917
Summary
Fix duplicate proto field detection in the Python JSON parser to use resolved field identity instead of raw JSON key strings.
Root cause
_ConvertMessage()tracked seen fields by their raw JSON key string. Because every proto field with an underscore has two valid JSON representations (snake_case proto name and camelCasejson_name), a payload containing both aliases passed the duplicate check undetected.Fix
Field numbers are unique per message and independent of JSON representation, so both aliases for the same field are correctly detected as a duplicate.
Conformance
This brings the Python implementation into conformance with the proto3 JSON specification:
The C++ and Go implementations already handle this correctly.