bson 4.8.2 → 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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/README.md +18 -6
- data/ext/bson/bson-endian.h +1 -1
- data/ext/bson/bson-native.h +1 -1
- data/ext/bson/bytebuf.c +1 -1
- data/ext/bson/endian.c +1 -1
- data/ext/bson/init.c +24 -22
- data/ext/bson/read.c +67 -19
- data/ext/bson/util.c +1 -1
- data/ext/bson/write.c +11 -4
- data/lib/bson.rb +1 -1
- data/lib/bson/active_support.rb +1 -1
- data/lib/bson/array.rb +10 -2
- data/lib/bson/binary.rb +1 -1
- data/lib/bson/boolean.rb +9 -2
- data/lib/bson/code.rb +1 -1
- data/lib/bson/code_with_scope.rb +9 -2
- data/lib/bson/config.rb +1 -1
- data/lib/bson/date.rb +1 -1
- data/lib/bson/date_time.rb +1 -1
- data/lib/bson/decimal128.rb +1 -1
- data/lib/bson/decimal128/builder.rb +1 -1
- data/lib/bson/document.rb +1 -1
- data/lib/bson/environment.rb +2 -1
- data/lib/bson/error.rb +10 -0
- data/lib/bson/ext_json.rb +1 -1
- data/lib/bson/false_class.rb +1 -1
- data/lib/bson/float.rb +1 -1
- data/lib/bson/hash.rb +10 -2
- data/lib/bson/int32.rb +1 -1
- data/lib/bson/int64.rb +1 -1
- data/lib/bson/integer.rb +1 -1
- data/lib/bson/json.rb +1 -1
- data/lib/bson/max_key.rb +1 -1
- data/lib/bson/min_key.rb +1 -1
- data/lib/bson/nil_class.rb +1 -1
- data/lib/bson/object.rb +1 -1
- data/lib/bson/object_id.rb +1 -1
- data/lib/bson/open_struct.rb +1 -1
- data/lib/bson/regexp.rb +8 -2
- data/lib/bson/registry.rb +1 -1
- data/lib/bson/specialized.rb +1 -1
- data/lib/bson/string.rb +1 -1
- data/lib/bson/symbol.rb +1 -1
- data/lib/bson/time.rb +1 -1
- data/lib/bson/time_with_zone.rb +1 -1
- data/lib/bson/timestamp.rb +1 -1
- data/lib/bson/true_class.rb +1 -1
- data/lib/bson/undefined.rb +1 -1
- data/lib/bson/version.rb +2 -2
- data/spec/bson/array_spec.rb +18 -1
- data/spec/bson/binary_spec.rb +1 -1
- data/spec/bson/binary_uuid_spec.rb +1 -1
- data/spec/bson/boolean_spec.rb +1 -1
- data/spec/bson/code_spec.rb +1 -1
- data/spec/bson/code_with_scope_spec.rb +1 -1
- data/spec/bson/date_spec.rb +1 -1
- data/spec/bson/date_time_spec.rb +1 -1
- data/spec/bson/decimal128_spec.rb +1 -1
- data/spec/bson/document_spec.rb +1 -1
- data/spec/bson/false_class_spec.rb +1 -1
- data/spec/bson/float_spec.rb +1 -1
- data/spec/bson/hash_spec.rb +18 -1
- data/spec/bson/int32_spec.rb +1 -1
- data/spec/bson/int64_spec.rb +1 -1
- data/spec/bson/integer_spec.rb +1 -1
- data/spec/bson/json_spec.rb +1 -1
- data/spec/bson/max_key_spec.rb +1 -1
- data/spec/bson/min_key_spec.rb +1 -1
- data/spec/bson/nil_class_spec.rb +1 -1
- data/spec/bson/object_id_spec.rb +1 -1
- data/spec/bson/object_spec.rb +1 -1
- data/spec/bson/open_struct_spec.rb +1 -1
- data/spec/bson/raw_spec.rb +12 -1
- data/spec/bson/regexp_spec.rb +1 -1
- data/spec/bson/registry_spec.rb +1 -1
- data/spec/bson/string_spec.rb +1 -1
- data/spec/bson/symbol_spec.rb +1 -1
- data/spec/bson/time_spec.rb +1 -1
- data/spec/bson/time_with_zone_spec.rb +1 -1
- data/spec/bson/timestamp_spec.rb +1 -1
- data/spec/bson/true_class_spec.rb +1 -1
- data/spec/bson/undefined_spec.rb +1 -1
- data/spec/bson_spec.rb +1 -1
- data/spec/runners/common_driver.rb +1 -1
- data/spec/runners/corpus.rb +13 -10
- data/spec/runners/corpus_legacy.rb +1 -1
- data/spec/spec_helper.rb +12 -1
- data/spec/spec_tests/data/corpus/top.json +0 -4
- data/spec/support/shared_examples.rb +1 -1
- data/spec/support/spec_config.rb +6 -0
- metadata +94 -95
- metadata.gz.sig +0 -0
data/ext/bson/util.c
CHANGED
data/ext/bson/write.c
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C) 2009-
|
|
2
|
+
* Copyright (C) 2009-2020 MongoDB Inc.
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -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
|
|
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);
|
data/lib/bson.rb
CHANGED
data/lib/bson/active_support.rb
CHANGED
data/lib/bson/array.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2009-
|
|
1
|
+
# Copyright (C) 2009-2020 MongoDB Inc.
|
|
2
2
|
#
|
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
# you may not use this file except in compliance with the License.
|
|
@@ -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)
|
|
@@ -119,7 +122,8 @@ module BSON
|
|
|
119
122
|
buffer.get_array(**options)
|
|
120
123
|
else
|
|
121
124
|
array = new
|
|
122
|
-
buffer.
|
|
125
|
+
start_position = buffer.read_position
|
|
126
|
+
expected_byte_size = buffer.get_int32
|
|
123
127
|
while (type = buffer.get_byte) != NULL_BYTE
|
|
124
128
|
buffer.get_cstring
|
|
125
129
|
cls = BSON::Registry.get(type)
|
|
@@ -130,6 +134,10 @@ module BSON
|
|
|
130
134
|
end
|
|
131
135
|
array << value
|
|
132
136
|
end
|
|
137
|
+
actual_byte_size = buffer.read_position - start_position
|
|
138
|
+
if actual_byte_size != expected_byte_size
|
|
139
|
+
raise Error::BSONDecodeError, "Expected array to take #{expected_byte_size} bytes but it took #{actual_byte_size} bytes"
|
|
140
|
+
end
|
|
133
141
|
array
|
|
134
142
|
end
|
|
135
143
|
end
|
data/lib/bson/binary.rb
CHANGED
data/lib/bson/boolean.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2009-
|
|
1
|
+
# Copyright (C) 2009-2020 MongoDB Inc.
|
|
2
2
|
#
|
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
# you may not use this file except in compliance with the License.
|
|
@@ -39,7 +39,14 @@ module BSON
|
|
|
39
39
|
#
|
|
40
40
|
# @since 2.0.0
|
|
41
41
|
def self.from_bson(buffer, **options)
|
|
42
|
-
buffer.get_byte
|
|
42
|
+
case v = buffer.get_byte
|
|
43
|
+
when TrueClass::TRUE_BYTE
|
|
44
|
+
true
|
|
45
|
+
when FalseClass::FALSE_BYTE
|
|
46
|
+
false
|
|
47
|
+
else
|
|
48
|
+
raise Error::BSONDecodeError, "Invalid boolean byte value: #{v}"
|
|
49
|
+
end
|
|
43
50
|
end
|
|
44
51
|
|
|
45
52
|
# Register this type when the module is loaded.
|
data/lib/bson/code.rb
CHANGED
data/lib/bson/code_with_scope.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2009-
|
|
1
|
+
# Copyright (C) 2009-2020 MongoDB Inc.
|
|
2
2
|
#
|
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
# you may not use this file except in compliance with the License.
|
|
@@ -119,13 +119,20 @@ module BSON
|
|
|
119
119
|
#
|
|
120
120
|
# @since 2.0.0
|
|
121
121
|
def self.from_bson(buffer, **options)
|
|
122
|
-
|
|
122
|
+
# Code with scope has a length (?) field which is not needed for
|
|
123
|
+
# decoding, but spec tests want this field validated.
|
|
124
|
+
start_position = buffer.read_position
|
|
125
|
+
length = buffer.get_int32
|
|
123
126
|
javascript = buffer.get_string
|
|
124
127
|
scope = if options.empty?
|
|
125
128
|
::Hash.from_bson(buffer)
|
|
126
129
|
else
|
|
127
130
|
::Hash.from_bson(buffer, **options)
|
|
128
131
|
end
|
|
132
|
+
read_bytes = buffer.read_position - start_position
|
|
133
|
+
if read_bytes != length
|
|
134
|
+
raise Error::BSONDecodeError, "CodeWithScope invalid: claimed length #{length}, actual length #{read_bytes}"
|
|
135
|
+
end
|
|
129
136
|
new(javascript, scope)
|
|
130
137
|
end
|
|
131
138
|
|
data/lib/bson/config.rb
CHANGED
data/lib/bson/date.rb
CHANGED
data/lib/bson/date_time.rb
CHANGED
data/lib/bson/decimal128.rb
CHANGED
data/lib/bson/document.rb
CHANGED
data/lib/bson/environment.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2009-
|
|
1
|
+
# Copyright (C) 2009-2020 MongoDB Inc.
|
|
2
2
|
#
|
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
# you may not use this file except in compliance with the License.
|
|
@@ -41,6 +41,7 @@ module BSON
|
|
|
41
41
|
# @return [ true, false ] If the Ruby version is 1.9.
|
|
42
42
|
#
|
|
43
43
|
# @since 4.2.0
|
|
44
|
+
# @deprecated
|
|
44
45
|
def ruby_1_9?
|
|
45
46
|
@ruby_1_9 ||= RUBY_VERSION < '2.0.0'
|
|
46
47
|
end
|
data/lib/bson/error.rb
CHANGED
|
@@ -13,5 +13,15 @@ module BSON
|
|
|
13
13
|
# unsupported binary subtype.
|
|
14
14
|
class UnsupportedBinarySubtype < Error
|
|
15
15
|
end
|
|
16
|
+
|
|
17
|
+
# Exception raised when BSON decoding fails.
|
|
18
|
+
class BSONDecodeError < Error
|
|
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
|
|
16
26
|
end
|
|
17
27
|
end
|
data/lib/bson/ext_json.rb
CHANGED
data/lib/bson/false_class.rb
CHANGED
data/lib/bson/float.rb
CHANGED
data/lib/bson/hash.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2009-
|
|
1
|
+
# Copyright (C) 2009-2020 MongoDB Inc.
|
|
2
2
|
#
|
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
# you may not use this file except in compliance with the License.
|
|
@@ -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
|
|
@@ -108,7 +111,8 @@ module BSON
|
|
|
108
111
|
buffer.get_hash(**options)
|
|
109
112
|
else
|
|
110
113
|
hash = Document.allocate
|
|
111
|
-
|
|
114
|
+
start_position = buffer.read_position
|
|
115
|
+
expected_byte_size = buffer.get_int32
|
|
112
116
|
while (type = buffer.get_byte) != NULL_BYTE
|
|
113
117
|
field = buffer.get_cstring
|
|
114
118
|
cls = BSON::Registry.get(type, field)
|
|
@@ -121,6 +125,10 @@ module BSON
|
|
|
121
125
|
end
|
|
122
126
|
hash.store(field, value)
|
|
123
127
|
end
|
|
128
|
+
actual_byte_size = buffer.read_position - start_position
|
|
129
|
+
if actual_byte_size != expected_byte_size
|
|
130
|
+
raise Error::BSONDecodeError, "Expected hash to take #{expected_byte_size} bytes but it took #{actual_byte_size} bytes"
|
|
131
|
+
end
|
|
124
132
|
hash
|
|
125
133
|
end
|
|
126
134
|
end
|
data/lib/bson/int32.rb
CHANGED
data/lib/bson/int64.rb
CHANGED
data/lib/bson/integer.rb
CHANGED
data/lib/bson/json.rb
CHANGED
data/lib/bson/max_key.rb
CHANGED
data/lib/bson/min_key.rb
CHANGED
data/lib/bson/nil_class.rb
CHANGED
data/lib/bson/object.rb
CHANGED
data/lib/bson/object_id.rb
CHANGED
data/lib/bson/open_struct.rb
CHANGED
data/lib/bson/regexp.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2009-
|
|
1
|
+
# Copyright (C) 2009-2020 MongoDB Inc.
|
|
2
2
|
#
|
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
# you may not use this file except in compliance with the License.
|
|
@@ -165,7 +165,13 @@ module BSON
|
|
|
165
165
|
#
|
|
166
166
|
# @since 3.1.0
|
|
167
167
|
def respond_to?(method, include_private = false)
|
|
168
|
-
|
|
168
|
+
if defined?(@pattern)
|
|
169
|
+
compile.respond_to?(method, include_private) || super
|
|
170
|
+
else
|
|
171
|
+
# YAML calls #respond_to? during deserialization, before the object
|
|
172
|
+
# is initialized.
|
|
173
|
+
super
|
|
174
|
+
end
|
|
169
175
|
end
|
|
170
176
|
|
|
171
177
|
# Encode the Raw Regexp object to BSON.
|
data/lib/bson/registry.rb
CHANGED
data/lib/bson/specialized.rb
CHANGED
data/lib/bson/string.rb
CHANGED
data/lib/bson/symbol.rb
CHANGED
data/lib/bson/time.rb
CHANGED
data/lib/bson/time_with_zone.rb
CHANGED
data/lib/bson/timestamp.rb
CHANGED
data/lib/bson/true_class.rb
CHANGED
data/lib/bson/undefined.rb
CHANGED
data/lib/bson/version.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2009-
|
|
1
|
+
# Copyright (C) 2009-2020 MongoDB Inc.
|
|
2
2
|
#
|
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
# you may not use this file except in compliance with the License.
|
|
@@ -13,5 +13,5 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
module BSON
|
|
16
|
-
VERSION = "4.
|
|
16
|
+
VERSION = "4.9.4".freeze
|
|
17
17
|
end
|