bson 4.9.3 → 4.9.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1d24a5aa6f5678defced03d887f8d946a7c03992cff980281138bb5836b83366
4
- data.tar.gz: b22e4544322858b2473b83f4842ba7074efd9a2183c181818ffe7120ae85bf1d
3
+ metadata.gz: 9d770bbf52ee70915f3f04b3831de6ef57c90ae131fcde462bb1925df609119e
4
+ data.tar.gz: ea768461024fac1dabccae70d6a2b6a6d68c74be70eb581b5849c37d535b1fb3
5
5
  SHA512:
6
- metadata.gz: f54379785c0d7c5dbd9e75919aa8ab5f0b6fa04158a2f4789c47bf763b763901c0a64255f4aadffc62a76cc3068e57d31352a49e5acc7fd5e6766fe7d7a32b3b
7
- data.tar.gz: 667307d98f30bfc0ea6a3a15bdfed67fd9a935c4512504bae9a2f545d2e1730f1105facf4acd11d03a315efacb877d531029feec01b77d7a54d1182df297b8ae
6
+ metadata.gz: c85b9d81f0f849fca1f59ee23c239de332107c4758673e60ee4f160fc8c0ba4089de905bdf8024d755b005c8828043f80f6158de0e780dba02d459c17550cc34
7
+ data.tar.gz: 9663f3b950a457c1143204ef24dd7aa418be6ea350c2a615fdf752b2d14482606133649d0b2d18549d5d9676f4df37f39d23a6b027b06365b1fbc7ebba3bfc8a
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -154,8 +154,15 @@ void pvt_put_type_byte(byte_buffer_t *b, VALUE val){
154
154
  case T_FLOAT:
155
155
  type_byte = BSON_TYPE_DOUBLE;
156
156
  break;
157
- default:{
158
- VALUE type = rb_funcall(val, rb_intern("bson_type"), 0);
157
+ default: {
158
+ VALUE type;
159
+ VALUE responds = rb_funcall(val, rb_intern("respond_to?"), 1, ID2SYM(rb_intern("bson_type")));
160
+ if (!RTEST(responds)) {
161
+ VALUE klass = pvt_const_get_3("BSON", "Error", "UnserializableClass");
162
+ VALUE val_str = rb_funcall(val, rb_intern("to_s"), 0);
163
+ rb_raise(klass, "Value does not define its BSON serialized type: %s", RSTRING_PTR(val_str));
164
+ }
165
+ type = rb_funcall(val, rb_intern("bson_type"), 0);
159
166
  type_byte = *RSTRING_PTR(type);
160
167
  RB_GC_GUARD(type);
161
168
  break;
@@ -627,7 +634,7 @@ VALUE rb_bson_byte_buffer_put_array(VALUE self, VALUE array, VALUE validating_ke
627
634
 
628
635
  for(int32_t index=0; index < RARRAY_LEN(array); index++, array_element++){
629
636
  pvt_put_type_byte(b, *array_element);
630
- pvt_put_array_index(b,index);
637
+ pvt_put_array_index(b, index);
631
638
  pvt_put_field(b, self, *array_element, validating_keys);
632
639
  }
633
640
  pvt_put_byte(b, 0);
@@ -47,6 +47,9 @@ module BSON
47
47
  position = buffer.length
48
48
  buffer.put_int32(0)
49
49
  each_with_index do |value, index|
50
+ unless value.respond_to?(:bson_type)
51
+ raise Error::UnserializableClass, "Array element at position #{index} does not define its BSON serialized type: #{value}"
52
+ end
50
53
  buffer.put_byte(value.bson_type)
51
54
  buffer.put_cstring(index.to_s)
52
55
  value.to_bson(buffer, validating_keys)
@@ -17,5 +17,11 @@ module BSON
17
17
  # Exception raised when BSON decoding fails.
18
18
  class BSONDecodeError < Error
19
19
  end
20
+
21
+ # Exception raised when serializing an Array or Hash to BSON and an
22
+ # array or hash element is of a class that does not define how to serialize
23
+ # itself to BSON.
24
+ class UnserializableClass < Error
25
+ end
20
26
  end
21
27
  end
@@ -44,6 +44,9 @@ module BSON
44
44
  position = buffer.length
45
45
  buffer.put_int32(0)
46
46
  each do |field, value|
47
+ unless value.respond_to?(:bson_type)
48
+ raise Error::UnserializableClass, "Hash value for key '#{field}' does not define its BSON serialized type: #{value}"
49
+ end
47
50
  buffer.put_byte(value.bson_type)
48
51
  key = field.to_bson_key(validating_keys)
49
52
  begin
@@ -13,5 +13,5 @@
13
13
  # limitations under the License.
14
14
 
15
15
  module BSON
16
- VERSION = "4.9.3".freeze
16
+ VERSION = "4.9.4".freeze
17
17
  end
@@ -132,6 +132,23 @@ describe Array do
132
132
  end
133
133
  end
134
134
  end
135
+
136
+ context 'when array contains value of an unserializable class' do
137
+ class ArraySpecUnserializableClass
138
+ end
139
+
140
+ let(:obj) do
141
+ [ArraySpecUnserializableClass.new]
142
+ end
143
+
144
+ it 'raises UnserializableClass' do
145
+ lambda do
146
+ obj.to_bson
147
+ end.should raise_error(BSON::Error::UnserializableClass,
148
+ # C extension does not provide element position in the exception message.
149
+ /(Array element at position 0|Value) does not define its BSON serialized type:.*ArraySpecUnserializableClass/)
150
+ end
151
+ end
135
152
  end
136
153
 
137
154
  describe "#to_bson_normalized_value" do
@@ -227,6 +227,23 @@ describe Hash do
227
227
  end
228
228
  end
229
229
  end
230
+
231
+ context 'when hash contains value of an unserializable class' do
232
+ class HashSpecUnserializableClass
233
+ end
234
+
235
+ let(:obj) do
236
+ {foo: HashSpecUnserializableClass.new}
237
+ end
238
+
239
+ it 'raises UnserializableClass' do
240
+ lambda do
241
+ obj.to_bson
242
+ end.should raise_error(BSON::Error::UnserializableClass,
243
+ # C extension does not provide hash key in the exception message.
244
+ /(Hash value for key 'foo'|Value) does not define its BSON serialized type:.*HashSpecUnserializableClass/)
245
+ end
246
+ end
230
247
  end
231
248
 
232
249
  describe '#to_bson' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bson
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.9.3
4
+ version: 4.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler Brock
@@ -33,7 +33,7 @@ cert_chain:
33
33
  gpvfPNWMwyBDlHaNS3GfO6cRRxBOvEG05GUCsvtTY4Bpe8yjE64wg1ymb47LMOnv
34
34
  Qb1lGORmf/opg45mluKUYl7pQNZHD0d3
35
35
  -----END CERTIFICATE-----
36
- date: 2020-06-24 00:00:00.000000000 Z
36
+ date: 2020-06-29 00:00:00.000000000 Z
37
37
  dependencies: []
38
38
  description: A fully featured BSON specification implementation in Ruby
39
39
  email:
@@ -233,118 +233,119 @@ required_rubygems_version: !ruby/object:Gem::Requirement
233
233
  - !ruby/object:Gem::Version
234
234
  version: 1.3.6
235
235
  requirements: []
236
- rubygems_version: 3.1.2
236
+ rubyforge_project:
237
+ rubygems_version: 2.7.6.2
237
238
  signing_key:
238
239
  specification_version: 4
239
240
  summary: Ruby implementation of the BSON specification
240
241
  test_files:
241
- - spec/bson/regexp_spec.rb
242
- - spec/bson/min_key_spec.rb
243
- - spec/bson/time_spec.rb
244
- - spec/bson/int32_spec.rb
245
- - spec/bson/code_spec.rb
246
- - spec/bson/config_spec.rb
247
- - spec/bson/undefined_spec.rb
248
- - spec/bson/boolean_spec.rb
249
- - spec/bson/object_spec.rb
250
- - spec/bson/array_spec.rb
251
- - spec/bson/hash_spec.rb
252
- - spec/bson/date_spec.rb
253
- - spec/bson/json_spec.rb
254
- - spec/bson/time_with_zone_spec.rb
255
- - spec/bson/int64_spec.rb
256
- - spec/bson/registry_spec.rb
257
- - spec/bson/binary_uuid_spec.rb
258
- - spec/bson/byte_buffer_read_spec.rb
259
- - spec/bson/raw_spec.rb
260
- - spec/bson/binary_spec.rb
261
- - spec/bson/max_key_spec.rb
262
- - spec/bson/symbol_raw_spec.rb
263
- - spec/bson/code_with_scope_spec.rb
264
- - spec/bson/byte_buffer_write_spec.rb
265
- - spec/bson/date_time_spec.rb
266
- - spec/bson/false_class_spec.rb
267
- - spec/bson/byte_buffer_spec.rb
268
- - spec/bson/string_spec.rb
269
- - spec/bson/open_struct_spec.rb
270
- - spec/bson/timestamp_spec.rb
271
- - spec/bson/ext_json_parse_spec.rb
272
- - spec/bson/symbol_spec.rb
273
- - spec/bson/decimal128_spec.rb
274
- - spec/bson/integer_spec.rb
275
- - spec/bson/document_spec.rb
276
- - spec/bson/float_spec.rb
277
- - spec/bson/nil_class_spec.rb
278
- - spec/bson/true_class_spec.rb
279
- - spec/bson/object_id_spec.rb
280
242
  - spec/spec_helper.rb
281
- - spec/bson_spec.rb
282
- - spec/support/utils.rb
283
- - spec/support/spec_config.rb
284
- - spec/support/shared_examples.rb
285
- - spec/runners/corpus.rb
286
- - spec/runners/corpus_legacy.rb
287
- - spec/runners/common_driver.rb
288
243
  - spec/spec_tests/corpus_spec.rb
289
244
  - spec/spec_tests/common_driver_spec.rb
245
+ - spec/spec_tests/data/corpus/decimal128-7.json
246
+ - spec/spec_tests/data/corpus/top.json
247
+ - spec/spec_tests/data/corpus/array.json
248
+ - spec/spec_tests/data/corpus/null.json
249
+ - spec/spec_tests/data/corpus/document.json
250
+ - spec/spec_tests/data/corpus/decimal128-2.json
251
+ - spec/spec_tests/data/corpus/decimal128-6.json
252
+ - spec/spec_tests/data/corpus/boolean.json
253
+ - spec/spec_tests/data/corpus/README.md
254
+ - spec/spec_tests/data/corpus/maxkey.json
255
+ - spec/spec_tests/data/corpus/binary.json
290
256
  - spec/spec_tests/data/corpus/multi-type.json
291
- - spec/spec_tests/data/corpus/decimal128-1.json
292
- - spec/spec_tests/data/corpus/dbref.json
257
+ - spec/spec_tests/data/corpus/timestamp.json
293
258
  - spec/spec_tests/data/corpus/multi-type-deprecated.json
294
- - spec/spec_tests/data/corpus/maxkey.json
295
- - spec/spec_tests/data/corpus/boolean.json
296
- - spec/spec_tests/data/corpus/datetime.json
259
+ - spec/spec_tests/data/corpus/dbpointer.json
297
260
  - spec/spec_tests/data/corpus/oid.json
298
- - spec/spec_tests/data/corpus/code.json
299
- - spec/spec_tests/data/corpus/array.json
300
- - spec/spec_tests/data/corpus/decimal128-7.json
261
+ - spec/spec_tests/data/corpus/regex.json
262
+ - spec/spec_tests/data/corpus/minkey.json
301
263
  - spec/spec_tests/data/corpus/symbol.json
264
+ - spec/spec_tests/data/corpus/dbref.json
265
+ - spec/spec_tests/data/corpus/decimal128-1.json
266
+ - spec/spec_tests/data/corpus/undefined.json
302
267
  - spec/spec_tests/data/corpus/double.json
303
- - spec/spec_tests/data/corpus/decimal128-6.json
304
- - spec/spec_tests/data/corpus/code_w_scope.json
305
- - spec/spec_tests/data/corpus/int64.json
306
- - spec/spec_tests/data/corpus/README.md
307
- - spec/spec_tests/data/corpus/string.json
308
- - spec/spec_tests/data/corpus/document.json
309
- - spec/spec_tests/data/corpus/decimal128-5.json
310
- - spec/spec_tests/data/corpus/top.json
311
268
  - spec/spec_tests/data/corpus/decimal128-4.json
312
- - spec/spec_tests/data/corpus/null.json
313
- - spec/spec_tests/data/corpus/int32.json
314
- - spec/spec_tests/data/corpus/dbpointer.json
315
- - spec/spec_tests/data/corpus/undefined.json
316
- - spec/spec_tests/data/corpus/timestamp.json
317
269
  - spec/spec_tests/data/corpus/decimal128-3.json
318
- - spec/spec_tests/data/corpus/binary.json
319
- - spec/spec_tests/data/corpus/minkey.json
320
- - spec/spec_tests/data/corpus/regex.json
321
- - spec/spec_tests/data/corpus/decimal128-2.json
322
- - spec/spec_tests/data/corpus_legacy/failures/datetime.json
270
+ - spec/spec_tests/data/corpus/decimal128-5.json
271
+ - spec/spec_tests/data/corpus/int32.json
272
+ - spec/spec_tests/data/corpus/string.json
273
+ - spec/spec_tests/data/corpus/code.json
274
+ - spec/spec_tests/data/corpus/code_w_scope.json
275
+ - spec/spec_tests/data/corpus/int64.json
276
+ - spec/spec_tests/data/corpus/datetime.json
277
+ - spec/spec_tests/data/corpus_legacy/top.json
278
+ - spec/spec_tests/data/corpus_legacy/array.json
279
+ - spec/spec_tests/data/corpus_legacy/null.json
280
+ - spec/spec_tests/data/corpus_legacy/document.json
281
+ - spec/spec_tests/data/corpus_legacy/boolean.json
282
+ - spec/spec_tests/data/corpus_legacy/maxkey.json
283
+ - spec/spec_tests/data/corpus_legacy/binary.json
284
+ - spec/spec_tests/data/corpus_legacy/timestamp.json
285
+ - spec/spec_tests/data/corpus_legacy/failures/dbpointer.json
323
286
  - spec/spec_tests/data/corpus_legacy/failures/symbol.json
324
287
  - spec/spec_tests/data/corpus_legacy/failures/int64.json
325
- - spec/spec_tests/data/corpus_legacy/failures/dbpointer.json
326
- - spec/spec_tests/data/corpus_legacy/maxkey.json
327
- - spec/spec_tests/data/corpus_legacy/boolean.json
288
+ - spec/spec_tests/data/corpus_legacy/failures/datetime.json
328
289
  - spec/spec_tests/data/corpus_legacy/oid.json
329
- - spec/spec_tests/data/corpus_legacy/code.json
330
- - spec/spec_tests/data/corpus_legacy/array.json
290
+ - spec/spec_tests/data/corpus_legacy/regex.json
291
+ - spec/spec_tests/data/corpus_legacy/minkey.json
292
+ - spec/spec_tests/data/corpus_legacy/undefined.json
331
293
  - spec/spec_tests/data/corpus_legacy/double.json
332
- - spec/spec_tests/data/corpus_legacy/code_w_scope.json
333
- - spec/spec_tests/data/corpus_legacy/string.json
334
- - spec/spec_tests/data/corpus_legacy/document.json
335
- - spec/spec_tests/data/corpus_legacy/top.json
336
- - spec/spec_tests/data/corpus_legacy/null.json
337
294
  - spec/spec_tests/data/corpus_legacy/int32.json
338
- - spec/spec_tests/data/corpus_legacy/undefined.json
339
- - spec/spec_tests/data/corpus_legacy/timestamp.json
340
- - spec/spec_tests/data/corpus_legacy/binary.json
341
- - spec/spec_tests/data/corpus_legacy/minkey.json
342
- - spec/spec_tests/data/corpus_legacy/regex.json
343
- - spec/spec_tests/data/decimal128/decimal128-1.json
295
+ - spec/spec_tests/data/corpus_legacy/string.json
296
+ - spec/spec_tests/data/corpus_legacy/code.json
297
+ - spec/spec_tests/data/corpus_legacy/code_w_scope.json
344
298
  - spec/spec_tests/data/decimal128/decimal128-7.json
299
+ - spec/spec_tests/data/decimal128/decimal128-2.json
345
300
  - spec/spec_tests/data/decimal128/decimal128-6.json
346
- - spec/spec_tests/data/decimal128/decimal128-5.json
301
+ - spec/spec_tests/data/decimal128/decimal128-1.json
347
302
  - spec/spec_tests/data/decimal128/decimal128-4.json
348
303
  - spec/spec_tests/data/decimal128/decimal128-3.json
349
- - spec/spec_tests/data/decimal128/decimal128-2.json
304
+ - spec/spec_tests/data/decimal128/decimal128-5.json
350
305
  - spec/spec_tests/corpus_legacy_spec.rb
306
+ - spec/support/utils.rb
307
+ - spec/support/shared_examples.rb
308
+ - spec/support/spec_config.rb
309
+ - spec/runners/common_driver.rb
310
+ - spec/runners/corpus_legacy.rb
311
+ - spec/runners/corpus.rb
312
+ - spec/bson/code_spec.rb
313
+ - spec/bson/byte_buffer_read_spec.rb
314
+ - spec/bson/int32_spec.rb
315
+ - spec/bson/max_key_spec.rb
316
+ - spec/bson/time_spec.rb
317
+ - spec/bson/array_spec.rb
318
+ - spec/bson/date_time_spec.rb
319
+ - spec/bson/document_spec.rb
320
+ - spec/bson/float_spec.rb
321
+ - spec/bson/nil_class_spec.rb
322
+ - spec/bson/time_with_zone_spec.rb
323
+ - spec/bson/ext_json_parse_spec.rb
324
+ - spec/bson/string_spec.rb
325
+ - spec/bson/open_struct_spec.rb
326
+ - spec/bson/config_spec.rb
327
+ - spec/bson/false_class_spec.rb
328
+ - spec/bson/raw_spec.rb
329
+ - spec/bson/regexp_spec.rb
330
+ - spec/bson/binary_spec.rb
331
+ - spec/bson/object_spec.rb
332
+ - spec/bson/decimal128_spec.rb
333
+ - spec/bson/binary_uuid_spec.rb
334
+ - spec/bson/boolean_spec.rb
335
+ - spec/bson/byte_buffer_spec.rb
336
+ - spec/bson/json_spec.rb
337
+ - spec/bson/symbol_spec.rb
338
+ - spec/bson/integer_spec.rb
339
+ - spec/bson/byte_buffer_write_spec.rb
340
+ - spec/bson/registry_spec.rb
341
+ - spec/bson/code_with_scope_spec.rb
342
+ - spec/bson/true_class_spec.rb
343
+ - spec/bson/undefined_spec.rb
344
+ - spec/bson/object_id_spec.rb
345
+ - spec/bson/timestamp_spec.rb
346
+ - spec/bson/hash_spec.rb
347
+ - spec/bson/symbol_raw_spec.rb
348
+ - spec/bson/min_key_spec.rb
349
+ - spec/bson/int64_spec.rb
350
+ - spec/bson/date_spec.rb
351
+ - spec/bson_spec.rb
metadata.gz.sig CHANGED
Binary file