erlectricity 1.1.0 → 1.1.1
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.
- data/History.txt +6 -0
- data/VERSION.yml +2 -2
- data/erlectricity.gemspec +2 -2
- data/ext/decoder.c +9 -12
- data/lib/erlectricity/encoder.rb +3 -3
- data/test/decode_spec.rb +5 -0
- data/test/encode_spec.rb +1 -0
- metadata +2 -2
data/History.txt
CHANGED
data/VERSION.yml
CHANGED
data/erlectricity.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{erlectricity}
|
8
|
-
s.version = "1.1.
|
8
|
+
s.version = "1.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Scott Fleckenstein", "Tom Preston-Werner"]
|
12
|
-
s.date = %q{2009-10-
|
12
|
+
s.date = %q{2009-10-28}
|
13
13
|
s.email = %q{tom@mojombo.com}
|
14
14
|
s.extensions = ["ext/extconf.rb"]
|
15
15
|
s.extra_rdoc_files = [
|
data/ext/decoder.c
CHANGED
@@ -97,7 +97,7 @@ VALUE read_large_tuple(unsigned char **pData) {
|
|
97
97
|
rb_raise(rb_eStandardError, "Invalid Type, not a large tuple");
|
98
98
|
}
|
99
99
|
|
100
|
-
int arity = read_4(pData);
|
100
|
+
unsigned int arity = read_4(pData);
|
101
101
|
|
102
102
|
VALUE array = rb_ary_new2(arity);
|
103
103
|
|
@@ -114,7 +114,7 @@ VALUE read_list(unsigned char **pData) {
|
|
114
114
|
rb_raise(rb_eStandardError, "Invalid Type, not an erlang list");
|
115
115
|
}
|
116
116
|
|
117
|
-
int size = read_4(pData);
|
117
|
+
unsigned int size = read_4(pData);
|
118
118
|
|
119
119
|
VALUE newref_class = rb_const_get(mErlectricity, rb_intern("List"));
|
120
120
|
VALUE array = rb_funcall(newref_class, rb_intern("new"), 1, INT2NUM(size));
|
@@ -131,7 +131,7 @@ VALUE read_list(unsigned char **pData) {
|
|
131
131
|
|
132
132
|
// primitives
|
133
133
|
|
134
|
-
void read_string_raw(unsigned char *dest, unsigned char **pData, int length) {
|
134
|
+
void read_string_raw(unsigned char *dest, unsigned char **pData, unsigned int length) {
|
135
135
|
memcpy((char *) dest, (char *) *pData, length);
|
136
136
|
*(dest + length) = (unsigned char) 0;
|
137
137
|
*pData += length;
|
@@ -142,12 +142,12 @@ VALUE read_bin(unsigned char **pData) {
|
|
142
142
|
rb_raise(rb_eStandardError, "Invalid Type, not an erlang binary");
|
143
143
|
}
|
144
144
|
|
145
|
-
int length = read_4(pData);
|
145
|
+
unsigned int length = read_4(pData);
|
146
146
|
|
147
|
-
|
148
|
-
|
147
|
+
VALUE rStr = rb_str_new((char *) *pData, length);
|
148
|
+
*pData += length;
|
149
149
|
|
150
|
-
return
|
150
|
+
return rStr;
|
151
151
|
}
|
152
152
|
|
153
153
|
VALUE read_string(unsigned char **pData) {
|
@@ -156,16 +156,13 @@ VALUE read_string(unsigned char **pData) {
|
|
156
156
|
}
|
157
157
|
|
158
158
|
int length = read_2(pData);
|
159
|
-
|
160
|
-
unsigned char buf[length + 1];
|
161
|
-
read_string_raw(buf, pData, length);
|
162
|
-
|
163
159
|
VALUE newref_class = rb_const_get(mErlectricity, rb_intern("List"));
|
164
160
|
VALUE array = rb_funcall(newref_class, rb_intern("new"), 1, INT2NUM(length));
|
165
161
|
|
166
162
|
int i = 0;
|
167
163
|
for(i; i < length; ++i) {
|
168
|
-
rb_ary_store(array, i, INT2NUM(
|
164
|
+
rb_ary_store(array, i, INT2NUM(**pData));
|
165
|
+
*pData += 1;
|
169
166
|
}
|
170
167
|
|
171
168
|
return array;
|
data/lib/erlectricity/encoder.rb
CHANGED
@@ -101,10 +101,10 @@ module Erlectricity
|
|
101
101
|
def write_bignum_guts(num)
|
102
102
|
write_1 (num >= 0 ? 0 : 1)
|
103
103
|
num = num.abs
|
104
|
-
|
105
|
-
|
104
|
+
while num != 0
|
105
|
+
rem = num % 256
|
106
106
|
write_1 rem
|
107
|
-
|
107
|
+
num = num >> 8
|
108
108
|
end
|
109
109
|
end
|
110
110
|
|
data/test/decode_spec.rb
CHANGED
@@ -127,6 +127,11 @@ context "When unpacking from a binary stream" do
|
|
127
127
|
get("f").should == :f
|
128
128
|
end
|
129
129
|
|
130
|
+
specify "massive binaries should not overflow the stack" do
|
131
|
+
bin = [131,109,0,128,0,0].pack('c*') + ('a' * (8 * 1024 * 1024))
|
132
|
+
assert_equal (8 * 1024 * 1024), Erlectricity::Decoder.decode(bin).size
|
133
|
+
end
|
134
|
+
|
130
135
|
specify "a good thing should be awesome" do
|
131
136
|
get(%Q-[{options,{struct,[{test,<<"I'm chargin' mah lazer">>}]}},{passage,<<"Why doesn't this work?">>}]-).should ==
|
132
137
|
[[:options, [:struct, [[:test, "I'm chargin' mah lazer"]]]], [:passage, "Why doesn't this work?"]]
|
data/test/encode_spec.rb
CHANGED
@@ -36,6 +36,7 @@ context "When packing to a binary stream" do
|
|
36
36
|
write_any(-(1 << 27)).should == get_erl_with_magic("#{-(1 << 27)}")
|
37
37
|
|
38
38
|
# #SMALL_BIGNUMS
|
39
|
+
get{@encoder.write_fixnum(10_000_000_000_000_000_000)}.should == get_erl("10000000000000000000")
|
39
40
|
get{@encoder.write_fixnum(1254976067)}.should == get_erl("1254976067")
|
40
41
|
get{@encoder.write_fixnum(-1254976067)}.should == get_erl("-1254976067")
|
41
42
|
# get{@encoder.write_fixnum((1 << word_length))}.should == get_erl("#{(1 << word_length)}")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: erlectricity
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Fleckenstein
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-10-
|
13
|
+
date: 2009-10-28 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|