check-json-name-before-deserialization.patch 1.7 KB

123456789101112131415161718192021222324252627282930313233
  1. --- contrib/libs/protobuf/src/google/protobuf/json/internal/descriptor_traits.h (2babb01d30e285a96044041b98053d9edbb48b2a)
  2. +++ contrib/libs/protobuf/src/google/protobuf/json/internal/descriptor_traits.h (aa368d72b2d33c8c4857d03624b10b97d2161d61)
  3. @@ -232,6 +232,9 @@ struct Proto2Descriptor {
  4. static absl::string_view FieldJsonName(Field f) {
  5. return f->has_json_name() ? f->json_name() : f->camelcase_name();
  6. }
  7. + static bool HasJsonName(Field f) {
  8. + return f->has_json_name();
  9. + }
  10. static absl::string_view FieldFullName(Field f) { return f->full_name(); }
  11. static absl::string_view FieldTypeName(Field f) {
  12. @@ -399,6 +402,9 @@ struct Proto3Type {
  13. static absl::string_view FieldJsonName(Field f) {
  14. return f->proto().json_name();
  15. }
  16. + static bool HasJsonName(Field f) {
  17. + return true;
  18. + }
  19. static absl::string_view FieldFullName(Field f) { return f->proto().name(); }
  20. static absl::string_view FieldTypeName(Field f) {
  21. --- contrib/libs/protobuf/src/google/protobuf/json/internal/unparser.cc (2babb01d30e285a96044041b98053d9edbb48b2a)
  22. +++ contrib/libs/protobuf/src/google/protobuf/json/internal/unparser.cc (aa368d72b2d33c8c4857d03624b10b97d2161d61)
  23. @@ -399,7 +399,7 @@ absl::Status WriteField(JsonWriter& writer, const Msg<Traits>& msg,
  24. // with an uppercase letter, and the Json name does not, we uppercase it.
  25. absl::string_view original_name = Traits::FieldName(field);
  26. absl::string_view json_name = Traits::FieldJsonName(field);
  27. - if (writer.options().allow_legacy_syntax &&
  28. + if (writer.options().allow_legacy_syntax && !Traits::HasJsonName(field) &&
  29. absl::ascii_isupper(original_name[0]) &&
  30. !absl::ascii_isupper(json_name[0])) {
  31. writer.Write(MakeQuoted(absl::ascii_toupper(original_name[0]),