msgpack 0.5.6 → 0.5.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.
- data/ChangeLog +5 -0
- data/Rakefile +13 -6
- data/ext/msgpack/unpacker.c +72 -22
- data/lib/msgpack/version.rb +1 -1
- data/spec/unpacker_spec.rb +38 -2
- metadata +2 -2
data/ChangeLog
CHANGED
data/Rakefile
CHANGED
@@ -72,23 +72,30 @@ task :default => :build
|
|
72
72
|
# exec $SHELL -l
|
73
73
|
#
|
74
74
|
### install cross-compiled ruby 2.0.0
|
75
|
-
# rbenv install 2.0.0-
|
75
|
+
# rbenv install 2.0.0-p247
|
76
|
+
# rbenv shell 2.0.0-p247
|
77
|
+
# gem update --system
|
76
78
|
# gem install rake-compiler
|
77
|
-
# rake-compiler cross-ruby VERSION=2.0.0-
|
79
|
+
# rake-compiler cross-ruby VERSION=2.0.0-p247
|
78
80
|
#
|
79
81
|
### install cross-compiled ruby 1.9.3
|
80
82
|
# rbenv install 1.9.3-p327
|
83
|
+
# rbenv shell 1.9.3-p327
|
84
|
+
# gem update --system
|
81
85
|
# gem install rake-compiler
|
82
86
|
# rake-compiler cross-ruby VERSION=1.9.3-p327
|
83
87
|
#
|
84
88
|
### install cross-compiled ruby 1.8.7
|
85
|
-
# rbenv install 1.8.7-
|
89
|
+
# rbenv install 1.8.7-p374
|
90
|
+
# rbenv shell 1.8.7-p374
|
91
|
+
# gem update --system
|
86
92
|
# gem install rake-compiler
|
87
|
-
# rake-compiler cross-ruby VERSION=1.8.7-
|
93
|
+
# rake-compiler cross-ruby VERSION=1.8.7-p374
|
88
94
|
#
|
89
95
|
### build gem
|
90
|
-
# rbenv shell 1.8.7-
|
91
|
-
# gem install bundler
|
96
|
+
# rbenv shell 1.8.7-p374
|
97
|
+
# gem install bundler
|
98
|
+
# bundle
|
92
99
|
# rake cross native gem RUBY_CC_VERSION=1.8.7:1.9.3:2.0.0
|
93
100
|
#
|
94
101
|
|
data/ext/msgpack/unpacker.c
CHANGED
@@ -50,7 +50,7 @@ void msgpack_unpacker_static_destroy()
|
|
50
50
|
#endif
|
51
51
|
}
|
52
52
|
|
53
|
-
#define HEAD_BYTE_REQUIRED
|
53
|
+
#define HEAD_BYTE_REQUIRED 0xc1
|
54
54
|
|
55
55
|
void msgpack_unpacker_init(msgpack_unpacker_t* uk)
|
56
56
|
{
|
@@ -247,7 +247,7 @@ static int read_raw_body_cont(msgpack_unpacker_t* uk)
|
|
247
247
|
return PRIMITIVE_OBJECT_COMPLETE;
|
248
248
|
}
|
249
249
|
|
250
|
-
static inline int read_raw_body_begin(msgpack_unpacker_t* uk)
|
250
|
+
static inline int read_raw_body_begin(msgpack_unpacker_t* uk, bool str)
|
251
251
|
{
|
252
252
|
/* assuming uk->reading_raw == Qnil */
|
253
253
|
|
@@ -287,14 +287,14 @@ static int read_primitive(msgpack_unpacker_t* uk)
|
|
287
287
|
SWITCH_RANGE(b, 0xe0, 0xff) // Negative Fixnum
|
288
288
|
return object_complete(uk, INT2NUM((int8_t)b));
|
289
289
|
|
290
|
-
SWITCH_RANGE(b, 0xa0, 0xbf) // FixRaw
|
290
|
+
SWITCH_RANGE(b, 0xa0, 0xbf) // FixRaw / fixstr
|
291
291
|
int count = b & 0x1f;
|
292
292
|
if(count == 0) {
|
293
293
|
return object_complete_string(uk, rb_str_buf_new(0));
|
294
294
|
}
|
295
295
|
/* read_raw_body_begin sets uk->reading_raw */
|
296
296
|
uk->reading_raw_remaining = count;
|
297
|
-
return read_raw_body_begin(uk);
|
297
|
+
return read_raw_body_begin(uk, true);
|
298
298
|
|
299
299
|
SWITCH_RANGE(b, 0x90, 0x9f) // FixArray
|
300
300
|
int count = b & 0x0f;
|
@@ -323,12 +323,9 @@ static int read_primitive(msgpack_unpacker_t* uk)
|
|
323
323
|
case 0xc3: // true
|
324
324
|
return object_complete(uk, Qtrue);
|
325
325
|
|
326
|
-
//case
|
327
|
-
//case
|
328
|
-
//case
|
329
|
-
//case 0xc7:
|
330
|
-
//case 0xc8:
|
331
|
-
//case 0xc9:
|
326
|
+
//case 0xc7: // ext 8
|
327
|
+
//case 0xc8: // ext 16
|
328
|
+
//case 0xc9: // ext 32
|
332
329
|
|
333
330
|
case 0xca: // float
|
334
331
|
{
|
@@ -400,14 +397,25 @@ static int read_primitive(msgpack_unpacker_t* uk)
|
|
400
397
|
return object_complete(uk, rb_ll2inum(i64));
|
401
398
|
}
|
402
399
|
|
403
|
-
//case 0xd4:
|
404
|
-
//case 0xd5:
|
405
|
-
//case 0xd6: //
|
406
|
-
//case 0xd7: //
|
407
|
-
//case 0xd8: //
|
408
|
-
//case 0xd9: // big float 32
|
400
|
+
//case 0xd4: // fixext 1
|
401
|
+
//case 0xd5: // fixext 2
|
402
|
+
//case 0xd6: // fixext 4
|
403
|
+
//case 0xd7: // fixext 8
|
404
|
+
//case 0xd8: // fixext 16
|
409
405
|
|
410
|
-
case
|
406
|
+
case 0xd9: // raw 8 / str 8
|
407
|
+
{
|
408
|
+
READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 1);
|
409
|
+
uint8_t count = cb->u8;
|
410
|
+
if(count == 0) {
|
411
|
+
return object_complete_string(uk, rb_str_buf_new(0));
|
412
|
+
}
|
413
|
+
/* read_raw_body_begin sets uk->reading_raw */
|
414
|
+
uk->reading_raw_remaining = count;
|
415
|
+
return read_raw_body_begin(uk, true);
|
416
|
+
}
|
417
|
+
|
418
|
+
case 0xda: // raw 16 / str 16
|
411
419
|
{
|
412
420
|
READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 2);
|
413
421
|
uint16_t count = _msgpack_be16(cb->u16);
|
@@ -416,10 +424,10 @@ static int read_primitive(msgpack_unpacker_t* uk)
|
|
416
424
|
}
|
417
425
|
/* read_raw_body_begin sets uk->reading_raw */
|
418
426
|
uk->reading_raw_remaining = count;
|
419
|
-
return read_raw_body_begin(uk);
|
427
|
+
return read_raw_body_begin(uk, true);
|
420
428
|
}
|
421
429
|
|
422
|
-
case 0xdb: // raw 32
|
430
|
+
case 0xdb: // raw 32 / str 16
|
423
431
|
{
|
424
432
|
READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 4);
|
425
433
|
uint32_t count = _msgpack_be32(cb->u32);
|
@@ -428,7 +436,43 @@ static int read_primitive(msgpack_unpacker_t* uk)
|
|
428
436
|
}
|
429
437
|
/* read_raw_body_begin sets uk->reading_raw */
|
430
438
|
uk->reading_raw_remaining = count;
|
431
|
-
return read_raw_body_begin(uk);
|
439
|
+
return read_raw_body_begin(uk, true);
|
440
|
+
}
|
441
|
+
|
442
|
+
case 0xc4: // bin 8
|
443
|
+
{
|
444
|
+
READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 1);
|
445
|
+
uint8_t count = cb->u8;
|
446
|
+
if(count == 0) {
|
447
|
+
return object_complete_string(uk, rb_str_buf_new(0));
|
448
|
+
}
|
449
|
+
/* read_raw_body_begin sets uk->reading_raw */
|
450
|
+
uk->reading_raw_remaining = count;
|
451
|
+
return read_raw_body_begin(uk, false);
|
452
|
+
}
|
453
|
+
|
454
|
+
case 0xc5: // bin 16
|
455
|
+
{
|
456
|
+
READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 2);
|
457
|
+
uint16_t count = _msgpack_be16(cb->u16);
|
458
|
+
if(count == 0) {
|
459
|
+
return object_complete_string(uk, rb_str_buf_new(0));
|
460
|
+
}
|
461
|
+
/* read_raw_body_begin sets uk->reading_raw */
|
462
|
+
uk->reading_raw_remaining = count;
|
463
|
+
return read_raw_body_begin(uk, false);
|
464
|
+
}
|
465
|
+
|
466
|
+
case 0xc6: // bin 32
|
467
|
+
{
|
468
|
+
READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 4);
|
469
|
+
uint32_t count = _msgpack_be32(cb->u32);
|
470
|
+
if(count == 0) {
|
471
|
+
return object_complete_string(uk, rb_str_buf_new(0));
|
472
|
+
}
|
473
|
+
/* read_raw_body_begin sets uk->reading_raw */
|
474
|
+
uk->reading_raw_remaining = count;
|
475
|
+
return read_raw_body_begin(uk, false);
|
432
476
|
}
|
433
477
|
|
434
478
|
case 0xdc: // array 16
|
@@ -664,8 +708,14 @@ int msgpack_unpacker_peek_next_object_type(msgpack_unpacker_t* uk)
|
|
664
708
|
case 0xd3: // signed int 64
|
665
709
|
return TYPE_INTEGER;
|
666
710
|
|
667
|
-
case
|
668
|
-
case
|
711
|
+
case 0xd9: // raw 8 / str 8
|
712
|
+
case 0xda: // raw 16 / str 16
|
713
|
+
case 0xdb: // raw 32 / str 32
|
714
|
+
return TYPE_RAW;
|
715
|
+
|
716
|
+
case 0xc4: // bin 8
|
717
|
+
case 0xc5: // bin 16
|
718
|
+
case 0xc6: // bin 32
|
669
719
|
return TYPE_RAW;
|
670
720
|
|
671
721
|
case 0xdc: // array 16
|
data/lib/msgpack/version.rb
CHANGED
data/spec/unpacker_spec.rb
CHANGED
@@ -173,14 +173,14 @@ describe Unpacker do
|
|
173
173
|
end
|
174
174
|
|
175
175
|
it 'read raises invalid byte error' do
|
176
|
-
unpacker.feed("\
|
176
|
+
unpacker.feed("\xc1")
|
177
177
|
lambda {
|
178
178
|
unpacker.read
|
179
179
|
}.should raise_error(MessagePack::MalformedFormatError)
|
180
180
|
end
|
181
181
|
|
182
182
|
it 'skip raises invalid byte error' do
|
183
|
-
unpacker.feed("\
|
183
|
+
unpacker.feed("\xc1")
|
184
184
|
lambda {
|
185
185
|
unpacker.skip
|
186
186
|
}.should raise_error(MessagePack::MalformedFormatError)
|
@@ -229,5 +229,41 @@ describe Unpacker do
|
|
229
229
|
|
230
230
|
parsed.should == true
|
231
231
|
end
|
232
|
+
|
233
|
+
it "msgpack str 8 type" do
|
234
|
+
MessagePack.unpack([0xd9, 0x00].pack('C*')).should == ""
|
235
|
+
MessagePack.unpack([0xd9, 0x01].pack('C*') + 'a').should == "a"
|
236
|
+
MessagePack.unpack([0xd9, 0x02].pack('C*') + 'aa').should == "aa"
|
237
|
+
end
|
238
|
+
|
239
|
+
it "msgpack str 16 type" do
|
240
|
+
MessagePack.unpack([0xda, 0x00, 0x00].pack('C*')).should == ""
|
241
|
+
MessagePack.unpack([0xda, 0x00, 0x01].pack('C*') + 'a').should == "a"
|
242
|
+
MessagePack.unpack([0xda, 0x00, 0x02].pack('C*') + 'aa').should == "aa"
|
243
|
+
end
|
244
|
+
|
245
|
+
it "msgpack str 32 type" do
|
246
|
+
MessagePack.unpack([0xdb, 0x00, 0x00, 0x00, 0x00].pack('C*')).should == ""
|
247
|
+
MessagePack.unpack([0xdb, 0x00, 0x00, 0x00, 0x01].pack('C*') + 'a').should == "a"
|
248
|
+
MessagePack.unpack([0xdb, 0x00, 0x00, 0x00, 0x02].pack('C*') + 'aa').should == "aa"
|
249
|
+
end
|
250
|
+
|
251
|
+
it "msgpack bin 8 type" do
|
252
|
+
MessagePack.unpack([0xc4, 0x00].pack('C*')).should == ""
|
253
|
+
MessagePack.unpack([0xc4, 0x01].pack('C*') + 'a').should == "a"
|
254
|
+
MessagePack.unpack([0xc4, 0x02].pack('C*') + 'aa').should == "aa"
|
255
|
+
end
|
256
|
+
|
257
|
+
it "msgpack bin 16 type" do
|
258
|
+
MessagePack.unpack([0xc5, 0x00, 0x00].pack('C*')).should == ""
|
259
|
+
MessagePack.unpack([0xc5, 0x00, 0x01].pack('C*') + 'a').should == "a"
|
260
|
+
MessagePack.unpack([0xc5, 0x00, 0x02].pack('C*') + 'aa').should == "aa"
|
261
|
+
end
|
262
|
+
|
263
|
+
it "msgpack bin 32 type" do
|
264
|
+
MessagePack.unpack([0xc6, 0x00, 0x00, 0x00, 0x00].pack('C*')).should == ""
|
265
|
+
MessagePack.unpack([0xc6, 0x00, 0x00, 0x00, 0x01].pack('C*') + 'a').should == "a"
|
266
|
+
MessagePack.unpack([0xc6, 0x00, 0x00, 0x00, 0x02].pack('C*') + 'aa').should == "aa"
|
267
|
+
end
|
232
268
|
end
|
233
269
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: msgpack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-11-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|