google-protobuf 3.25.2-java → 4.26.0.rc.1-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of google-protobuf might be problematic. Click here for more details.

Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/ext/google/protobuf_c/message.c +38 -76
  3. data/ext/google/protobuf_c/message.h +1 -1
  4. data/ext/google/protobuf_c/ruby-upb.c +11791 -10801
  5. data/ext/google/protobuf_c/ruby-upb.h +5163 -4241
  6. data/ext/google/protobuf_c/shared_convert.c +5 -3
  7. data/ext/google/protobuf_c/shared_convert.h +2 -2
  8. data/ext/google/protobuf_c/shared_message.c +8 -6
  9. data/ext/google/protobuf_c/third_party/utf8_range/utf8_range.c +467 -0
  10. data/ext/google/protobuf_c/third_party/utf8_range/utf8_range.h +9 -8
  11. data/lib/google/protobuf/any_pb.rb +1 -22
  12. data/lib/google/protobuf/api_pb.rb +1 -24
  13. data/lib/google/protobuf/descriptor_pb.rb +2 -23
  14. data/lib/google/protobuf/duration_pb.rb +1 -22
  15. data/lib/google/protobuf/empty_pb.rb +1 -22
  16. data/lib/google/protobuf/ffi/descriptor.rb +2 -3
  17. data/lib/google/protobuf/ffi/enum_descriptor.rb +1 -1
  18. data/lib/google/protobuf/ffi/ffi.rb +2 -0
  19. data/lib/google/protobuf/ffi/field_descriptor.rb +10 -1
  20. data/lib/google/protobuf/ffi/file_descriptor.rb +1 -13
  21. data/lib/google/protobuf/ffi/internal/convert.rb +7 -23
  22. data/lib/google/protobuf/ffi/map.rb +13 -11
  23. data/lib/google/protobuf/ffi/message.rb +10 -13
  24. data/lib/google/protobuf/ffi/oneof_descriptor.rb +1 -1
  25. data/lib/google/protobuf/ffi/repeated_field.rb +12 -10
  26. data/lib/google/protobuf/field_mask_pb.rb +1 -22
  27. data/lib/google/protobuf/plugin_pb.rb +2 -24
  28. data/lib/google/protobuf/repeated_field.rb +1 -2
  29. data/lib/google/protobuf/source_context_pb.rb +1 -22
  30. data/lib/google/protobuf/struct_pb.rb +1 -22
  31. data/lib/google/protobuf/timestamp_pb.rb +1 -22
  32. data/lib/google/protobuf/type_pb.rb +1 -24
  33. data/lib/google/protobuf/wrappers_pb.rb +1 -22
  34. data/lib/google/protobuf_ffi.rb +1 -2
  35. data/lib/google/protobuf_java.jar +0 -0
  36. data/lib/google/protobuf_native.rb +0 -1
  37. data/lib/google/tasks/ffi.rake +1 -3
  38. metadata +9 -12
  39. data/ext/google/protobuf_c/third_party/utf8_range/naive.c +0 -92
  40. data/ext/google/protobuf_c/third_party/utf8_range/range2-neon.c +0 -157
  41. data/ext/google/protobuf_c/third_party/utf8_range/range2-sse.c +0 -170
  42. data/lib/google/protobuf/descriptor_dsl.rb +0 -465
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 02ad8ba5913acd67e758f55de627b570f80de510945cf07b1fe34dea1c3bc8a6
4
- data.tar.gz: 5eb6973284aeef112085210c1ecb3d93363c1fd93048c0f87fb9385473b87cf5
3
+ metadata.gz: 699b781d271ff4121867ba56b87538549b42b1306db12ead0ff14df31019f46c
4
+ data.tar.gz: 1f9d3a9a2cfc47395a99c5e77483d5d0ad5f2ed64ed0e4e90c0560b63ad5e5fb
5
5
  SHA512:
6
- metadata.gz: 03475d3e04fcc0a7216442ebe962867fbcd6290282bb7124b5f0cf100bdc0de64d48c05680532e9f4171f77114eca06a3c930763eeb02179d203996fade829da
7
- data.tar.gz: 19eee11d54ce48118eae3d79c8ed88a5ba36696d5ef1952b53c2b5b020cd4dd41e7e26171af511737c46a2227680aeb811f375a8a09bd9e4ffa873c7b3eeaada
6
+ metadata.gz: 06e0c320935124f63c2d927e70dcc8ce030e19e9bda817e6723574be3b2257af3678d680cc3fa219270eecc021f32feffbd6becf007335f053a0a203249a6daa
7
+ data.tar.gz: 0af2a1cfca6bc96a88cc98d6f5bd5e9faf690d2744db694573b682e0352ddab012c54d6a536bd6e217be5221918e16741366d038eb7e5564aff054054ea10b02
@@ -488,7 +488,8 @@ static int Map_initialize_kwarg(VALUE key, VALUE val, VALUE _self) {
488
488
  k = Convert_RubyToUpb(key, "", map_init->key_type, NULL);
489
489
 
490
490
  if (map_init->val_type.type == kUpb_CType_Message && TYPE(val) == T_HASH) {
491
- upb_MiniTable* t = upb_MessageDef_MiniTable(map_init->val_type.def.msgdef);
491
+ const upb_MiniTable* t =
492
+ upb_MessageDef_MiniTable(map_init->val_type.def.msgdef);
492
493
  upb_Message* msg = upb_Message_New(t, map_init->arena);
493
494
  Message_InitFromValue(msg, map_init->val_type.def.msgdef, val,
494
495
  map_init->arena);
@@ -519,7 +520,7 @@ static upb_MessageValue MessageValue_FromValue(VALUE val, TypeInfo info,
519
520
  upb_Arena* arena) {
520
521
  if (info.type == kUpb_CType_Message) {
521
522
  upb_MessageValue msgval;
522
- upb_MiniTable* t = upb_MessageDef_MiniTable(info.def.msgdef);
523
+ const upb_MiniTable* t = upb_MessageDef_MiniTable(info.def.msgdef);
523
524
  upb_Message* msg = upb_Message_New(t, arena);
524
525
  Message_InitFromValue(msg, info.def.msgdef, val, arena);
525
526
  msgval.msg_val = msg;
@@ -635,7 +636,7 @@ static VALUE Message_initialize(int argc, VALUE* argv, VALUE _self) {
635
636
  Message* self = ruby_to_Message(_self);
636
637
  VALUE arena_rb = Arena_new();
637
638
  upb_Arena* arena = Arena_get(arena_rb);
638
- upb_MiniTable* t = upb_MessageDef_MiniTable(self->msgdef);
639
+ const upb_MiniTable* t = upb_MessageDef_MiniTable(self->msgdef);
639
640
  upb_Message* msg = upb_Message_New(t, arena);
640
641
 
641
642
  Message_InitPtr(_self, msg, arena_rb);
@@ -660,11 +661,8 @@ static VALUE Message_dup(VALUE _self) {
660
661
  Message* self = ruby_to_Message(_self);
661
662
  VALUE new_msg = rb_class_new_instance(0, NULL, CLASS_OF(_self));
662
663
  Message* new_msg_self = ruby_to_Message(new_msg);
663
- size_t size = upb_MessageDef_MiniTable(self->msgdef)->size;
664
-
665
- // TODO
666
- // TODO
667
- memcpy((upb_Message*)new_msg_self->msg, self->msg, size);
664
+ const upb_MiniTable* m = upb_MessageDef_MiniTable(self->msgdef);
665
+ upb_Message_ShallowCopy((upb_Message*)new_msg_self->msg, self->msg, m);
668
666
  Arena_fuse(self->arena, Arena_get(new_msg_self->arena));
669
667
  return new_msg;
670
668
  }
@@ -678,7 +676,8 @@ bool Message_Equal(const upb_Message* m1, const upb_Message* m2,
678
676
  if (upb_Status_IsOk(&status)) {
679
677
  return return_value;
680
678
  } else {
681
- rb_raise(cParseError, upb_Status_ErrorMessage(&status));
679
+ rb_raise(cParseError, "Message_Equal(): %s",
680
+ upb_Status_ErrorMessage(&status));
682
681
  }
683
682
  }
684
683
 
@@ -709,7 +708,8 @@ uint64_t Message_Hash(const upb_Message* msg, const upb_MessageDef* m,
709
708
  if (upb_Status_IsOk(&status)) {
710
709
  return return_value;
711
710
  } else {
712
- rb_raise(cParseError, upb_Status_ErrorMessage(&status));
711
+ rb_raise(cParseError, "Message_Hash(): %s",
712
+ upb_Status_ErrorMessage(&status));
713
713
  }
714
714
  }
715
715
 
@@ -766,58 +766,34 @@ static VALUE Message_CreateHash(const upb_Message* msg,
766
766
  if (!msg) return Qnil;
767
767
 
768
768
  VALUE hash = rb_hash_new();
769
- int n = upb_MessageDef_FieldCount(m);
770
- bool is_proto2;
771
-
772
- // We currently have a few behaviors that are specific to proto2.
773
- // This is unfortunate, we should key behaviors off field attributes (like
774
- // whether a field has presence), not proto2 vs. proto3. We should see if we
775
- // can change this without breaking users.
776
- is_proto2 = upb_MessageDef_Syntax(m) == kUpb_Syntax_Proto2;
777
-
778
- for (int i = 0; i < n; i++) {
779
- const upb_FieldDef* field = upb_MessageDef_Field(m, i);
780
- TypeInfo type_info = TypeInfo_get(field);
781
- upb_MessageValue msgval;
782
- VALUE msg_value;
783
- VALUE msg_key;
784
-
785
- if (!is_proto2 && upb_FieldDef_IsSubMessage(field) &&
786
- !upb_FieldDef_IsRepeated(field) &&
787
- !upb_Message_HasFieldByDef(msg, field)) {
788
- // TODO: Legacy behavior, remove when we fix the is_proto2 differences.
789
- msg_key = ID2SYM(rb_intern(upb_FieldDef_Name(field)));
790
- rb_hash_aset(hash, msg_key, Qnil);
791
- continue;
792
- }
769
+ size_t iter = kUpb_Message_Begin;
770
+ const upb_DefPool* pool = upb_FileDef_Pool(upb_MessageDef_File(m));
771
+ const upb_FieldDef* field;
772
+ upb_MessageValue val;
793
773
 
794
- // Do not include fields that are not present (oneof or optional fields).
795
- if (is_proto2 && upb_FieldDef_HasPresence(field) &&
796
- !upb_Message_HasFieldByDef(msg, field)) {
774
+ while (upb_Message_Next(msg, m, pool, &field, &val, &iter)) {
775
+ if (upb_FieldDef_IsExtension(field)) {
776
+ // TODO: allow extensions once we have decided what naming scheme the
777
+ // symbol should use. eg. :"[pkg.ext]"
797
778
  continue;
798
779
  }
799
780
 
800
- msg_key = ID2SYM(rb_intern(upb_FieldDef_Name(field)));
801
- msgval = upb_Message_GetFieldByDef(msg, field);
802
-
803
- // Proto2 omits empty map/repeated filds also.
781
+ TypeInfo type_info = TypeInfo_get(field);
782
+ VALUE msg_value;
804
783
 
805
784
  if (upb_FieldDef_IsMap(field)) {
806
785
  const upb_MessageDef* entry_m = upb_FieldDef_MessageSubDef(field);
807
786
  const upb_FieldDef* key_f = upb_MessageDef_FindFieldByNumber(entry_m, 1);
808
787
  const upb_FieldDef* val_f = upb_MessageDef_FindFieldByNumber(entry_m, 2);
809
788
  upb_CType key_type = upb_FieldDef_CType(key_f);
810
- msg_value = Map_CreateHash(msgval.map_val, key_type, TypeInfo_get(val_f));
789
+ msg_value = Map_CreateHash(val.map_val, key_type, TypeInfo_get(val_f));
811
790
  } else if (upb_FieldDef_IsRepeated(field)) {
812
- if (is_proto2 &&
813
- (!msgval.array_val || upb_Array_Size(msgval.array_val) == 0)) {
814
- continue;
815
- }
816
- msg_value = RepeatedField_CreateArray(msgval.array_val, type_info);
791
+ msg_value = RepeatedField_CreateArray(val.array_val, type_info);
817
792
  } else {
818
- msg_value = Scalar_CreateHash(msgval, type_info);
793
+ msg_value = Scalar_CreateHash(val, type_info);
819
794
  }
820
795
 
796
+ VALUE msg_key = ID2SYM(rb_intern(upb_FieldDef_Name(field)));
821
797
  rb_hash_aset(hash, msg_key, msg_value);
822
798
  }
823
799
 
@@ -850,22 +826,12 @@ static VALUE Message_to_h(VALUE _self) {
850
826
  * Freezes the message object. We have to intercept this so we can pin the
851
827
  * Ruby object into memory so we don't forget it's frozen.
852
828
  */
853
- static VALUE Message_freeze(VALUE _self) {
829
+ VALUE Message_freeze(VALUE _self) {
854
830
  Message* self = ruby_to_Message(_self);
855
- if (!RB_OBJ_FROZEN(_self)) {
856
- Arena_Pin(self->arena, _self);
857
- RB_OBJ_FREEZE(_self);
858
- }
859
- return _self;
860
- }
861
831
 
862
- /*
863
- * Deep freezes the message object recursively.
864
- * Internal use only.
865
- */
866
- VALUE Message_internal_deep_freeze(VALUE _self) {
867
- Message* self = ruby_to_Message(_self);
868
- Message_freeze(_self);
832
+ if (RB_OBJ_FROZEN(_self)) return _self;
833
+ Arena_Pin(self->arena, _self);
834
+ RB_OBJ_FREEZE(_self);
869
835
 
870
836
  int n = upb_MessageDef_FieldCount(self->msgdef);
871
837
  for (int i = 0; i < n; i++) {
@@ -874,11 +840,11 @@ VALUE Message_internal_deep_freeze(VALUE _self) {
874
840
 
875
841
  if (field != Qnil) {
876
842
  if (upb_FieldDef_IsMap(f)) {
877
- Map_internal_deep_freeze(field);
843
+ Map_freeze(field);
878
844
  } else if (upb_FieldDef_IsRepeated(f)) {
879
- RepeatedField_internal_deep_freeze(field);
845
+ RepeatedField_freeze(field);
880
846
  } else if (upb_FieldDef_IsSubMessage(f)) {
881
- Message_internal_deep_freeze(field);
847
+ Message_freeze(field);
882
848
  }
883
849
  }
884
850
  }
@@ -987,7 +953,7 @@ VALUE Message_decode_bytes(int size, const char* bytes, int options,
987
953
  rb_raise(cParseError, "Error occurred during parsing");
988
954
  }
989
955
  if (freeze) {
990
- Message_internal_deep_freeze(msg_rb);
956
+ Message_freeze(msg_rb);
991
957
  }
992
958
  return msg_rb;
993
959
  }
@@ -1009,9 +975,6 @@ static VALUE Message_decode_json(int argc, VALUE* argv, VALUE klass) {
1009
975
  int options = 0;
1010
976
  upb_Status status;
1011
977
 
1012
- // TODO: use this message's pool instead.
1013
- const upb_DefPool* symtab = DescriptorPool_GetSymtab(generated_pool);
1014
-
1015
978
  if (argc < 1 || argc > 2) {
1016
979
  rb_raise(rb_eArgError, "Expected 1 or 2 arguments.");
1017
980
  }
@@ -1045,8 +1008,9 @@ static VALUE Message_decode_json(int argc, VALUE* argv, VALUE klass) {
1045
1008
  }
1046
1009
 
1047
1010
  upb_Status_Clear(&status);
1011
+ const upb_DefPool* pool = upb_FileDef_Pool(upb_MessageDef_File(msg->msgdef));
1048
1012
  if (!upb_JsonDecode(RSTRING_PTR(data), RSTRING_LEN(data),
1049
- (upb_Message*)msg->msg, msg->msgdef, symtab, options,
1013
+ (upb_Message*)msg->msg, msg->msgdef, pool, options,
1050
1014
  Arena_get(msg->arena), &status)) {
1051
1015
  rb_raise(cParseError, "Error occurred during parsing: %s",
1052
1016
  upb_Status_ErrorMessage(&status));
@@ -1125,9 +1089,6 @@ static VALUE Message_encode_json(int argc, VALUE* argv, VALUE klass) {
1125
1089
  size_t size;
1126
1090
  upb_Status status;
1127
1091
 
1128
- // TODO: use this message's pool instead.
1129
- const upb_DefPool* symtab = DescriptorPool_GetSymtab(generated_pool);
1130
-
1131
1092
  if (argc < 1 || argc > 2) {
1132
1093
  rb_raise(rb_eArgError, "Expected 1 or 2 arguments.");
1133
1094
  }
@@ -1162,8 +1123,9 @@ static VALUE Message_encode_json(int argc, VALUE* argv, VALUE klass) {
1162
1123
  }
1163
1124
 
1164
1125
  upb_Status_Clear(&status);
1165
- size = upb_JsonEncode(msg->msg, msg->msgdef, symtab, options, buf,
1166
- sizeof(buf), &status);
1126
+ const upb_DefPool* pool = upb_FileDef_Pool(upb_MessageDef_File(msg->msgdef));
1127
+ size = upb_JsonEncode(msg->msg, msg->msgdef, pool, options, buf, sizeof(buf),
1128
+ &status);
1167
1129
 
1168
1130
  if (!upb_Status_IsOk(&status)) {
1169
1131
  rb_raise(cParseError, "Error occurred during encoding: %s",
@@ -1173,7 +1135,7 @@ static VALUE Message_encode_json(int argc, VALUE* argv, VALUE klass) {
1173
1135
  VALUE ret;
1174
1136
  if (size >= sizeof(buf)) {
1175
1137
  char* buf2 = malloc(size + 1);
1176
- upb_JsonEncode(msg->msg, msg->msgdef, symtab, options, buf2, size + 1,
1138
+ upb_JsonEncode(msg->msg, msg->msgdef, pool, options, buf2, size + 1,
1177
1139
  &status);
1178
1140
  ret = rb_str_new(buf2, size);
1179
1141
  free(buf2);
@@ -78,7 +78,7 @@ VALUE Message_decode_bytes(int size, const char* bytes, int options,
78
78
  VALUE klass, bool freeze);
79
79
 
80
80
  // Recursively freeze message
81
- VALUE Message_internal_deep_freeze(VALUE _self);
81
+ VALUE Message_freeze(VALUE _self);
82
82
 
83
83
  // Call at startup to register all types in this module.
84
84
  void Message_register(VALUE protobuf);