google-protobuf 4.36.1-x86-linux-gnu → 4.37.0.rc.1-x86-linux-gnu

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.
@@ -16,6 +16,10 @@
16
16
  uint64_t shared_Message_Hash(const upb_Message* msg, const upb_MessageDef* m,
17
17
  uint64_t seed, upb_Status* status) {
18
18
  upb_Arena* arena = upb_Arena_New();
19
+ if (!arena) {
20
+ upb_Status_SetErrorMessage(status, "Out of memory");
21
+ return 0;
22
+ }
19
23
  char* data;
20
24
  size_t size;
21
25
 
@@ -32,6 +36,10 @@ uint64_t shared_Message_Hash(const upb_Message* msg, const upb_MessageDef* m,
32
36
  }
33
37
 
34
38
  upb_Arena_Free(arena);
35
- upb_Status_SetErrorMessage(status, "Error calculating hash");
39
+ if (encode_status == kUpb_EncodeStatus_OutOfMemory) {
40
+ upb_Status_SetErrorMessage(status, "Out of memory");
41
+ } else {
42
+ upb_Status_SetErrorMessage(status, "Error calculating hash");
43
+ }
36
44
  return 0;
37
45
  }
Binary file
Binary file
Binary file
Binary file
@@ -190,9 +190,31 @@ module Google
190
190
  end
191
191
  end
192
192
 
193
- def to_h_internal(msg, message_descriptor)
193
+ def to_h_internal(msg, message_descriptor, emit_defaults = false)
194
194
  return nil if msg.nil? or msg.null?
195
195
  hash = {}
196
+
197
+ if emit_defaults
198
+ message_descriptor.each do |field_descriptor|
199
+ next if field_descriptor.has_presence? &&
200
+ !Google::Protobuf::FFI.get_message_has(msg, field_descriptor)
201
+
202
+ message_value = Google::Protobuf::FFI.get_message_value(msg, field_descriptor)
203
+
204
+ if field_descriptor.map?
205
+ hash_entry = map_create_hash(message_value[:map_val], field_descriptor, emit_defaults)
206
+ elsif field_descriptor.repeated?
207
+ hash_entry = repeated_field_create_array(message_value[:array_val], field_descriptor, field_descriptor.type, emit_defaults)
208
+ else
209
+ hash_entry = scalar_create_hash(message_value, field_descriptor.type, field_descriptor: field_descriptor, emit_defaults: emit_defaults)
210
+ end
211
+
212
+ hash[field_descriptor.name.to_sym] = hash_entry
213
+ end
214
+
215
+ return hash
216
+ end
217
+
196
218
  iter = ::FFI::MemoryPointer.new(:size_t, 1)
197
219
  iter.write(:size_t, Google::Protobuf::FFI::Upb_Message_Begin)
198
220
  message_value = Google::Protobuf::FFI::MessageValue.new
@@ -202,11 +224,11 @@ module Google
202
224
  field_descriptor = FieldDescriptor.from_native field_def_ptr.get_pointer(0)
203
225
 
204
226
  if field_descriptor.map?
205
- hash_entry = map_create_hash(message_value[:map_val], field_descriptor)
227
+ hash_entry = map_create_hash(message_value[:map_val], field_descriptor, emit_defaults)
206
228
  elsif field_descriptor.repeated?
207
- hash_entry = repeated_field_create_array(message_value[:array_val], field_descriptor, field_descriptor.type)
229
+ hash_entry = repeated_field_create_array(message_value[:array_val], field_descriptor, field_descriptor.type, emit_defaults)
208
230
  else
209
- hash_entry = scalar_create_hash(message_value, field_descriptor.type, field_descriptor: field_descriptor)
231
+ hash_entry = scalar_create_hash(message_value, field_descriptor.type, field_descriptor: field_descriptor, emit_defaults: emit_defaults)
210
232
  end
211
233
 
212
234
  hash[field_descriptor.name.to_sym] = hash_entry
@@ -215,7 +237,7 @@ module Google
215
237
  hash
216
238
  end
217
239
 
218
- def map_create_hash(map_ptr, field_descriptor)
240
+ def map_create_hash(map_ptr, field_descriptor, emit_defaults = false)
219
241
  return {} if map_ptr.nil? or map_ptr.null?
220
242
  return_value = {}
221
243
 
@@ -233,24 +255,24 @@ module Google
233
255
  key_message_value = Google::Protobuf::FFI.map_key(map_ptr, iter_size_t)
234
256
  value_message_value = Google::Protobuf::FFI.map_value(map_ptr, iter_size_t)
235
257
  hash_key = convert_upb_to_ruby(key_message_value, key_field_type)
236
- hash_value = scalar_create_hash(value_message_value, value_field_type, msg_or_enum_descriptor: value_field_def.subtype)
258
+ hash_value = scalar_create_hash(value_message_value, value_field_type, msg_or_enum_descriptor: value_field_def.subtype, emit_defaults: emit_defaults)
237
259
  return_value[hash_key] = hash_value
238
260
  end
239
261
  return_value
240
262
  end
241
263
 
242
- def repeated_field_create_array(array, field_descriptor, type)
264
+ def repeated_field_create_array(array, field_descriptor, type, emit_defaults = false)
243
265
  return_value = []
244
266
  n = (array.nil? || array.null?) ? 0 : Google::Protobuf::FFI.array_size(array)
245
267
  0.upto(n - 1) do |i|
246
268
  message_value = Google::Protobuf::FFI.get_msgval_at(array, i)
247
- return_value << scalar_create_hash(message_value, type, field_descriptor: field_descriptor)
269
+ return_value << scalar_create_hash(message_value, type, field_descriptor: field_descriptor, emit_defaults: emit_defaults)
248
270
  end
249
271
  return_value
250
272
  end
251
273
 
252
274
  # @param field_descriptor [FieldDescriptor] Descriptor of the field to convert to a hash.
253
- def scalar_create_hash(message_value, type, field_descriptor: nil, msg_or_enum_descriptor: nil)
275
+ def scalar_create_hash(message_value, type, field_descriptor: nil, msg_or_enum_descriptor: nil, emit_defaults: false)
254
276
  if [:message, :enum].include? type
255
277
  if field_descriptor.nil?
256
278
  if msg_or_enum_descriptor.nil?
@@ -260,7 +282,7 @@ module Google
260
282
  msg_or_enum_descriptor = field_descriptor.subtype
261
283
  end
262
284
  if type == :message
263
- to_h_internal(message_value[:msg_val], msg_or_enum_descriptor)
285
+ to_h_internal(message_value[:msg_val], msg_or_enum_descriptor, emit_defaults)
264
286
  elsif type == :enum
265
287
  convert_upb_to_ruby message_value, type, msg_or_enum_descriptor
266
288
  end
@@ -20,7 +20,6 @@ module Google
20
20
 
21
21
  # MapIterator
22
22
  attach_function :map_next, :upb_MapIterator_Next, [:Map, :pointer], :bool
23
- attach_function :map_done, :upb_MapIterator_Done, [:Map, :size_t], :bool
24
23
  attach_function :map_key, :upb_MapIterator_Key, [:Map, :size_t], MessageValue.by_value
25
24
  attach_function :map_value, :upb_MapIterator_Value, [:Map, :size_t], MessageValue.by_value
26
25
  end
@@ -137,8 +137,16 @@ module Google
137
137
  encoding.read(:pointer).read_string(size_ptr.read(:size_t)).hash
138
138
  end
139
139
 
140
- def to_h
141
- to_h_internal @msg, self.class.descriptor
140
+ ##
141
+ # call-seq:
142
+ # Message.to_h(emit_defaults: false) => hash
143
+ #
144
+ # Returns the message as a Ruby Hash object, with keys as symbols. With
145
+ # emit_defaults: true, fields that have no presence are also included with
146
+ # their default values. Fields that have presence (message fields, oneof
147
+ # fields and fields with explicit presence) are included only when set.
148
+ def to_h(emit_defaults: false)
149
+ to_h_internal @msg, self.class.descriptor, emit_defaults
142
150
  end
143
151
 
144
152
  ##
@@ -67,8 +67,14 @@ module Google
67
67
  # also includes Enumerable; combined with this method, the repeated field thus
68
68
  # acts like an ordinary Ruby sequence.
69
69
  def each &block
70
- each_msg_val do |element|
70
+ # The length is re-read every iteration: the block can clear or shrink
71
+ # the field, and a cached length would then read past the end of the
72
+ # upb array.
73
+ i = 0
74
+ while i < length
75
+ element = Google::Protobuf::FFI.get_msgval_at(array, i)
71
76
  yield(convert_upb_to_ruby(element, type, descriptor, arena))
77
+ i += 1
72
78
  end
73
79
  self
74
80
  end
@@ -222,6 +228,8 @@ module Google
222
228
  return true if other.object_id == object_id
223
229
  if other.is_a? RepeatedField
224
230
  return false unless other.length == length
231
+ return true if length == 0
232
+ return false if type != other.send(:type) or descriptor != other.send(:descriptor)
225
233
  each_msg_val_with_index do |msg_val, i|
226
234
  other_msg_val = Google::Protobuf::FFI.get_msgval_at(other.send(:array), i)
227
235
  unless Google::Protobuf::FFI.message_value_equal(msg_val, other_msg_val, type, descriptor)
@@ -7,7 +7,7 @@ require 'google/protobuf'
7
7
  require 'google/protobuf/descriptor_pb'
8
8
 
9
9
 
10
- descriptor_data = "\n,google/protobuf/json_enumvalue_options.proto\x12\x0cpb.enumvalue\x1a google/protobuf/descriptor.proto\"(\n\x14JsonEnumValueOptions\x12\x0e\n\x06string\x18\x01 \x01(\tX\x01:\\\n\x04json\x12!.google.protobuf.EnumValueOptions\x18\xe6\x07 \x01(\x0b\x32\".pb.enumvalue.JsonEnumValueOptionsB\x06\xb2\x01\x03\x08\xea\x07\x42\x1a\n\x18\x63om.google.protobuf.utilb\x08\x65\x64itionsp\xe9\x07"
10
+ descriptor_data = "\n,google/protobuf/json_enumvalue_options.proto\x12\x0cpb.enumvalue\x1a google/protobuf/descriptor.proto\"(\n\x14JsonEnumValueOptions\x12\x0e\n\x06string\x18\x01 \x01(\tX\x01:\\\n\x04json\x12!.google.protobuf.EnumValueOptions\x18\xe6\x07 \x01(\x0b\x32\".pb.enumvalue.JsonEnumValueOptionsB\x06\xb2\x01\x03\x08\xea\x07\x42J\n\x18\x63om.google.protobuf.utilZ.google.golang.org/protobuf/types/jsonoptionspbb\x08\x65\x64itionsp\xe9\x07"
11
11
 
12
12
  pool = ::Google::Protobuf::DescriptorPool.generated_pool
13
13
  pool.add_serialized_file(descriptor_data)
@@ -7,7 +7,7 @@ require 'google/protobuf'
7
7
  require 'google/protobuf/json_enumvalue_options_pb'
8
8
 
9
9
 
10
- descriptor_data = "\n\"google/protobuf/json_options.proto\x12\x02pb\x1a,google/protobuf/json_enumvalue_options.protoB\x1a\n\x18\x63om.google.protobuf.utilP\x00\x62\x08\x65\x64itionsp\xe9\x07"
10
+ descriptor_data = "\n\"google/protobuf/json_options.proto\x12\x02pb\x1a,google/protobuf/json_enumvalue_options.protoBJ\n\x18\x63om.google.protobuf.utilZ.google.golang.org/protobuf/types/jsonoptionspbP\x00\x62\x08\x65\x64itionsp\xe9\x07"
11
11
 
12
12
  pool = ::Google::Protobuf::DescriptorPool.generated_pool
13
13
  pool.add_serialized_file(descriptor_data)
@@ -52,7 +52,8 @@ module Google
52
52
  :pack, :permutation, :product, :pretty_print, :pretty_print_cycle,
53
53
  :rassoc, :repeated_combination, :repeated_permutation, :reverse,
54
54
  :rindex, :rotate, :sample, :shuffle, :shelljoin,
55
- :to_s, :transpose, :union, :uniq, :|
55
+ :to_s, :transpose, :union, :uniq, :|,
56
+ :values_at
56
57
 
57
58
 
58
59
  def first(n=nil)
@@ -95,7 +96,6 @@ module Google
95
96
 
96
97
  # array aliases into enumerable
97
98
  alias_method :slice, :[]
98
- alias_method :values_at, :select
99
99
  alias_method :map, :collect
100
100
 
101
101
 
metadata CHANGED
@@ -1,28 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-protobuf
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.36.1
4
+ version: 4.37.0.rc.1
5
5
  platform: x86-linux-gnu
6
6
  authors:
7
7
  - Protobuf Authors
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2026-08-31 00:00:00.000000000 Z
10
+ date: 2026-10-14 00:00:00.000000000 Z
11
11
  dependencies:
12
- - !ruby/object:Gem::Dependency
13
- name: bigdecimal
14
- requirement: !ruby/object:Gem::Requirement
15
- requirements:
16
- - - ">="
17
- - !ruby/object:Gem::Version
18
- version: '0'
19
- type: :runtime
20
- prerelease: false
21
- version_requirements: !ruby/object:Gem::Requirement
22
- requirements:
23
- - - ">="
24
- - !ruby/object:Gem::Version
25
- version: '0'
26
12
  - !ruby/object:Gem::Dependency
27
13
  name: rake
28
14
  requirement: !ruby/object:Gem::Requirement
@@ -107,6 +93,20 @@ dependencies:
107
93
  - - "~>"
108
94
  - !ruby/object:Gem::Version
109
95
  version: '3.7'
96
+ - !ruby/object:Gem::Dependency
97
+ name: bigdecimal
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
110
  description: Protocol Buffers are Google's data interchange format.
111
111
  email: protobuf@googlegroups.com
112
112
  executables: []
@@ -186,7 +186,7 @@ homepage: https://developers.google.com/protocol-buffers
186
186
  licenses:
187
187
  - BSD-3-Clause
188
188
  metadata:
189
- source_code_uri: https://github.com/protocolbuffers/protobuf/tree/v4.36.1/ruby
189
+ source_code_uri: https://github.com/protocolbuffers/protobuf/tree/v37.0-rc1/ruby
190
190
  rdoc_options: []
191
191
  require_paths:
192
192
  - lib
@@ -200,6 +200,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
200
200
  version: 4.1.dev
201
201
  required_rubygems_version: !ruby/object:Gem::Requirement
202
202
  requirements:
203
+ - - ">"
204
+ - !ruby/object:Gem::Version
205
+ version: 1.3.1
203
206
  - - ">="
204
207
  - !ruby/object:Gem::Version
205
208
  version: 3.3.22