vox-etf 0.1.6 → 0.1.7
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
- data/ext/vox/decoder.hpp +2 -2
- data/ext/vox/encoder.hpp +18 -7
- data/lib/vox/etf/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5a6a2cc3e5abff452aed1b87b83f3c9906fa673cdac9251b92051492d7de0ff2
|
|
4
|
+
data.tar.gz: 2caddaa1b5163345f676d9649c624e9ec2580e770d32dddecd2325800e9845d0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 56ff3b112058ec393869a0532905bad5f27adcd533a7427cacea86ffdbae49b261ca4a258dc33683af52bf0bce0c44fb6554a08b11d99a6c2a1c3862deb1ae8c
|
|
7
|
+
data.tar.gz: 96482eb0de9485c5938724b8d06d136028907ec99270a0bf46239d33b6313b1ad7207df021206099c11528f3dcbde8faeabdf0ba18f4cb007dad9061dc01f21c
|
data/ext/vox/decoder.hpp
CHANGED
|
@@ -362,9 +362,9 @@ namespace etf
|
|
|
362
362
|
{
|
|
363
363
|
const uint32_t decompressed_size = read32();
|
|
364
364
|
|
|
365
|
-
|
|
365
|
+
unsigned long source_size = decompressed_size;
|
|
366
366
|
uint8_t *out_buffer = (uint8_t *)malloc(decompressed_size);
|
|
367
|
-
const int ret = uncompress(out_buffer, &source_size, (const unsigned char *)(data + offset), (
|
|
367
|
+
const int ret = uncompress(out_buffer, &source_size, (const unsigned char *)(data + offset), (uLong)(size - offset));
|
|
368
368
|
|
|
369
369
|
offset += source_size;
|
|
370
370
|
if (ret != Z_OK)
|
data/ext/vox/encoder.hpp
CHANGED
|
@@ -99,11 +99,11 @@ namespace etf
|
|
|
99
99
|
|
|
100
100
|
void encode_fixnum(VALUE fixnum)
|
|
101
101
|
{
|
|
102
|
-
|
|
103
|
-
if (
|
|
104
|
-
erlpack_append_small_integer(erl_buff, (
|
|
102
|
+
uint32_t n = NUM2UINT(fixnum);
|
|
103
|
+
if (n > 0 && n <= UINT8_MAX)
|
|
104
|
+
erlpack_append_small_integer(erl_buff, (uint8_t)n);
|
|
105
105
|
else
|
|
106
|
-
erlpack_append_integer(erl_buff,
|
|
106
|
+
erlpack_append_integer(erl_buff, n);
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
void encode_bignum(VALUE bignum)
|
|
@@ -138,15 +138,20 @@ namespace etf
|
|
|
138
138
|
|
|
139
139
|
void encode_array(VALUE array)
|
|
140
140
|
{
|
|
141
|
-
|
|
141
|
+
uint64_t size = RARRAY_LEN(array);
|
|
142
142
|
if (size == 0)
|
|
143
143
|
{
|
|
144
144
|
erlpack_append_nil_ext(erl_buff);
|
|
145
145
|
return;
|
|
146
146
|
}
|
|
147
|
+
else if (size > UINT32_MAX)
|
|
148
|
+
{
|
|
149
|
+
rb_raise(rb_eRangeError, "Array size is too large to fit into a 32 bit integer.");
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
147
152
|
|
|
148
153
|
erlpack_append_list_header(erl_buff, size);
|
|
149
|
-
for (
|
|
154
|
+
for (size_t index = 0; index < size; index++)
|
|
150
155
|
{
|
|
151
156
|
encode_object(RARRAY_AREF(array, index));
|
|
152
157
|
}
|
|
@@ -166,7 +171,13 @@ namespace etf
|
|
|
166
171
|
|
|
167
172
|
void encode_hash(VALUE hash)
|
|
168
173
|
{
|
|
169
|
-
|
|
174
|
+
uint64_t size = RHASH_SIZE(hash);
|
|
175
|
+
if (size > UINT32_MAX)
|
|
176
|
+
{
|
|
177
|
+
rb_raise(rb_eRangeError, "Hash size is too large to fit into a 32 bit integer");
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
|
|
170
181
|
erlpack_append_map_header(erl_buff, size);
|
|
171
182
|
VALUE keys = rb_funcall(hash, rb_intern("keys"), 0);
|
|
172
183
|
|
data/lib/vox/etf/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: vox-etf
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Matthew Carey
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-09-
|
|
11
|
+
date: 2020-09-14 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
@@ -146,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
146
146
|
- !ruby/object:Gem::Version
|
|
147
147
|
version: '0'
|
|
148
148
|
requirements: []
|
|
149
|
-
rubygems_version: 3.
|
|
149
|
+
rubygems_version: 3.1.2
|
|
150
150
|
signing_key:
|
|
151
151
|
specification_version: 4
|
|
152
152
|
summary: ETF decoding/encoding for vox.
|