msgpack 1.8.2 → 1.8.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: 862389c2f51c867e3321cf2fbe4e27fcda54cd56d2bb83f6b9aaa86739754edf
4
- data.tar.gz: 664d19a5e5beeb65605722029377acd9775aedb14b27cbce83e8ae0077ea0216
3
+ metadata.gz: 4a5aa259ac95b61218c0f1cf10a23195bf3c847c7b1423172f50ece723363905
4
+ data.tar.gz: 9b3369d91349618e125cef788f3051fd706bcbbf01a78ed2afcb82ecd6d0ecf5
5
5
  SHA512:
6
- metadata.gz: 43f018a1b67b57bf9f1b1d6c42d9e233f2eac7eb0eeec62fd57749d064c656fde252edb729cb54fead8b873c925c63a06092594ea4c616f19fea3ba5c51d1a67
7
- data.tar.gz: 35a7c61e2e5b3298417f8cd54ad348cc588b2fd47030b76f5441f7eec70593a4bb05a28a7a77006837ab16cc4ebe78701d04a6e94a237667d2048930505c6f16
6
+ metadata.gz: 9feed41442045775173abfcae2d384b27904c44b81cd3674dfa18bfbf10558c9f77ea2f2ed51b694101a33e37761fa94553108fedb866d4834bbce697f96579a
7
+ data.tar.gz: ae0d30ca66f5f4e1e22fcfee2615bd91db00ddfe101e043a0753e32bc7252c42d9bbfc3b763d3a519f20fdbb28ad0be2f5071472ad8b7c6c4053ac7702875432
data/ChangeLog CHANGED
@@ -1,8 +1,18 @@
1
+ 2026-07-28 1.8.4
2
+
3
+ * Fix `MessagePack::Buffer` to stop using already released memory page.
4
+ This could have caused data to leak across buffers when using the MessagePack::Buffer API
5
+ directly.
6
+
7
+ 2026-06-10 1.8.3
8
+
9
+ * Fix an integer overflow when parsing maps.
10
+
1
11
  2026-06-09 1.8.2
2
12
 
3
13
  * Fix `Buffer#clear` to properly reset memory chunks before adding them back to the pool.
4
14
  This could have caused data to leak across buffers when using the MessagePack::Buffer API
5
- directly. [CVE-PENDING].
15
+ directly. [CVE-2026-54522].
6
16
 
7
17
  2026-05-28 1.8.1
8
18
 
@@ -85,6 +85,14 @@ public class Decoder implements Iterator<IRubyObject> {
85
85
  feed(bytes, offset, length);
86
86
  }
87
87
 
88
+ private int getUnsignedInt() {
89
+ int size = buffer.getInt();
90
+ if (size < 0) {
91
+ throw runtime.newRaiseException(underflowErrorClass, "Size too large (limited to 2**31 for the Java version)");
92
+ }
93
+ return size;
94
+ }
95
+
88
96
  public void feed(byte[] bytes) {
89
97
  feed(bytes, 0, bytes.length);
90
98
  }
@@ -200,7 +208,7 @@ public class Decoder implements Iterator<IRubyObject> {
200
208
  } else if (b == ARY16) {
201
209
  return runtime.newFixnum(buffer.getShort() & 0xffff);
202
210
  } else if (b == ARY32) {
203
- return runtime.newFixnum(buffer.getInt());
211
+ return runtime.newFixnum(getUnsignedInt());
204
212
  }
205
213
  throw runtime.newRaiseException(unexpectedTypeErrorClass, "unexpected type");
206
214
  } catch (RaiseException re) {
@@ -221,7 +229,7 @@ public class Decoder implements Iterator<IRubyObject> {
221
229
  } else if (b == MAP16) {
222
230
  return runtime.newFixnum(buffer.getShort() & 0xffff);
223
231
  } else if (b == MAP32) {
224
- return runtime.newFixnum(buffer.getInt());
232
+ return runtime.newFixnum(getUnsignedInt());
225
233
  }
226
234
  throw runtime.newRaiseException(unexpectedTypeErrorClass, "unexpected type");
227
235
  } catch (RaiseException re) {
@@ -258,10 +266,10 @@ public class Decoder implements Iterator<IRubyObject> {
258
266
  case TRUE: return runtime.getTrue();
259
267
  case BIN8: return consumeString(buffer.get() & 0xff, binaryEncoding);
260
268
  case BIN16: return consumeString(buffer.getShort() & 0xffff, binaryEncoding);
261
- case BIN32: return consumeString(buffer.getInt(), binaryEncoding);
269
+ case BIN32: return consumeString(getUnsignedInt(), binaryEncoding);
262
270
  case VAREXT8: return consumeExtension(buffer.get() & 0xff);
263
271
  case VAREXT16: return consumeExtension(buffer.getShort() & 0xffff);
264
- case VAREXT32: return consumeExtension(buffer.getInt());
272
+ case VAREXT32: return consumeExtension(getUnsignedInt());
265
273
  case FLOAT32: return runtime.newFloat(buffer.getFloat());
266
274
  case FLOAT64: return runtime.newFloat(buffer.getDouble());
267
275
  case UINT8: return runtime.newFixnum(buffer.get() & 0xffL);
@@ -283,11 +291,11 @@ public class Decoder implements Iterator<IRubyObject> {
283
291
  case FIXEXT16: return consumeExtension(16);
284
292
  case STR8: return consumeString(buffer.get() & 0xff, utf8Encoding);
285
293
  case STR16: return consumeString(buffer.getShort() & 0xffff, utf8Encoding);
286
- case STR32: return consumeString(buffer.getInt(), utf8Encoding);
294
+ case STR32: return consumeString(getUnsignedInt(), utf8Encoding);
287
295
  case ARY16: return consumeArray(buffer.getShort() & 0xffff);
288
- case ARY32: return consumeArray(buffer.getInt());
296
+ case ARY32: return consumeArray(getUnsignedInt());
289
297
  case MAP16: return consumeHash(buffer.getShort() & 0xffff);
290
- case MAP32: return consumeHash(buffer.getInt());
298
+ case MAP32: return consumeHash(getUnsignedInt());
291
299
  default: break outer;
292
300
  }
293
301
  case 0xe:
data/ext/msgpack/buffer.c CHANGED
@@ -127,6 +127,15 @@ void msgpack_buffer_mark(void *ptr)
127
127
 
128
128
  bool _msgpack_buffer_shift_chunk(msgpack_buffer_t* b)
129
129
  {
130
+ if(b->rmem_owner == &b->head->mem) {
131
+ /* the chunk that owns the rmem page is going away and takes the page
132
+ * with it. don't carve the remaining space out of a page that is
133
+ * already back in the pool. */
134
+ b->rmem_end = NULL;
135
+ b->rmem_last = NULL;
136
+ b->rmem_owner = NULL;
137
+ }
138
+
130
139
  _msgpack_buffer_chunk_destroy(b->head);
131
140
 
132
141
  if(b->head == &b->tail) {
@@ -264,6 +273,18 @@ static inline msgpack_buffer_chunk_t* _msgpack_buffer_alloc_new_chunk(msgpack_bu
264
273
  return chunk;
265
274
  }
266
275
 
276
+ /* b->tail is copied into nc and then rebuilt, so the rmem page pointer moves
277
+ * to nc. the owner has to follow it: if it kept pointing at b->tail.mem, the
278
+ * transfer in _msgpack_buffer_chunk_malloc would degenerate into a
279
+ * self-assignment and the page would be released by nc while the rebuilt tail
280
+ * is still reading from it. */
281
+ static inline void _msgpack_buffer_transfer_rmem_owner(msgpack_buffer_t* b, msgpack_buffer_chunk_t* nc)
282
+ {
283
+ if(b->rmem_owner == &b->tail.mem) {
284
+ b->rmem_owner = &nc->mem;
285
+ }
286
+ }
287
+
267
288
  static inline void _msgpack_buffer_add_new_chunk(msgpack_buffer_t* b)
268
289
  {
269
290
  if(b->head == &b->tail) {
@@ -275,6 +296,7 @@ static inline void _msgpack_buffer_add_new_chunk(msgpack_buffer_t* b)
275
296
  msgpack_buffer_chunk_t* nc = _msgpack_buffer_alloc_new_chunk(b);
276
297
 
277
298
  *nc = b->tail;
299
+ _msgpack_buffer_transfer_rmem_owner(b, nc);
278
300
  b->head = nc;
279
301
  nc->next = &b->tail;
280
302
 
@@ -295,6 +317,7 @@ static inline void _msgpack_buffer_add_new_chunk(msgpack_buffer_t* b)
295
317
 
296
318
  /* rebuild tail */
297
319
  *nc = b->tail;
320
+ _msgpack_buffer_transfer_rmem_owner(b, nc);
298
321
  before_tail->next = nc;
299
322
  nc->next = &b->tail;
300
323
  }
data/ext/msgpack/packer.h CHANGED
@@ -25,11 +25,6 @@
25
25
  #define MSGPACK_PACKER_IO_FLUSH_THRESHOLD_TO_WRITE_STRING_BODY (1024)
26
26
  #endif
27
27
 
28
- #ifndef UNREACHABLE_RETURN
29
- // Ruby 2.5
30
- #define UNREACHABLE_RETURN() return
31
- #endif
32
-
33
28
  struct msgpack_packer_t;
34
29
  typedef struct msgpack_packer_t msgpack_packer_t;
35
30
 
@@ -418,7 +413,6 @@ static inline void msgpack_packer_write_string_value(msgpack_packer_t* pk, VALUE
418
413
 
419
414
  if(RB_UNLIKELY(len > 0xffffffffL)) {
420
415
  rb_raise(rb_eArgError, "size of string is too long to pack: %lu bytes should be <= %ld", len, 0xffffffffL);
421
- UNREACHABLE_RETURN();
422
416
  }
423
417
 
424
418
  if (RB_UNLIKELY(pk->compatibility_mode)) {
@@ -211,7 +211,7 @@ static inline int object_complete(msgpack_unpacker_t* uk, VALUE object)
211
211
  return PRIMITIVE_OBJECT_COMPLETE;
212
212
  }
213
213
 
214
- static inline int object_complete_symbol(msgpack_unpacker_t* uk, VALUE object)
214
+ static inline int object_complete_frozen(msgpack_unpacker_t* uk, VALUE object)
215
215
  {
216
216
  uk->last_object = object;
217
217
  reset_head_byte(uk);
@@ -222,9 +222,9 @@ static inline int object_complete_ext(msgpack_unpacker_t* uk, int ext_type, VALU
222
222
  {
223
223
  if (uk->optimized_symbol_ext_type && ext_type == uk->symbol_ext_type) {
224
224
  if (RB_UNLIKELY(NIL_P(str))) { // empty extension is returned as Qnil
225
- return object_complete_symbol(uk, ID2SYM(rb_intern3("", 0, rb_utf8_encoding())));
225
+ return object_complete_frozen(uk, ID2SYM(rb_intern3("", 0, rb_utf8_encoding())));
226
226
  }
227
- return object_complete_symbol(uk, rb_str_intern(str));
227
+ return object_complete_frozen(uk, rb_str_intern(str));
228
228
  }
229
229
 
230
230
  int ext_flags;
@@ -378,7 +378,14 @@ static inline int read_raw_body_begin(msgpack_unpacker_t* uk, int raw_type)
378
378
  reset_head_byte(uk);
379
379
  uk->reading_raw_remaining = 0;
380
380
 
381
- _msgpack_unpacker_stack_push(uk, STACK_TYPE_RECURSIVE, 1, Qnil);
381
+ if(_msgpack_unpacker_stack_push(uk, STACK_TYPE_RECURSIVE, 1, Qnil) < 0) {
382
+ /* Recursive extensions re-enter msgpack_unpacker_read() through the
383
+ * user proc, consuming a full C stack frame per nesting level. If we
384
+ * ignore a failed push (stack already at MSGPACK_UNPACKER_STACK_CAPACITY)
385
+ * the recursion continues unbounded and exhausts the C stack (SIGSEGV)
386
+ * instead of raising StackError like every other container type. */
387
+ return PRIMITIVE_STACK_TOO_DEEP;
388
+ }
382
389
  int raised;
383
390
  obj = protected_proc_call(proc, 1, &uk->self, &raised);
384
391
  msgpack_unpacker_stack_pop(uk);
@@ -398,7 +405,7 @@ static inline int read_raw_body_begin(msgpack_unpacker_t* uk, int raw_type)
398
405
  int ret;
399
406
  if ((uk->optimized_symbol_ext_type && uk->symbol_ext_type == raw_type)) {
400
407
  VALUE symbol = msgpack_buffer_read_top_as_symbol(UNPACKER_BUFFER_(uk), length, raw_type != RAW_TYPE_BINARY);
401
- ret = object_complete_symbol(uk, symbol);
408
+ ret = object_complete_frozen(uk, symbol);
402
409
  } else if (is_reading_map_key(uk) && raw_type == RAW_TYPE_STRING) {
403
410
  /* don't use zerocopy for hash keys but get a frozen string directly
404
411
  * because rb_hash_aset freezes keys and it causes copying */
@@ -409,7 +416,7 @@ static inline int read_raw_body_begin(msgpack_unpacker_t* uk, int raw_type)
409
416
  } else {
410
417
  key = msgpack_buffer_read_top_as_symbol(UNPACKER_BUFFER_(uk), length, true);
411
418
  }
412
- ret = object_complete_symbol(uk, key);
419
+ ret = object_complete_frozen(uk, key);
413
420
  } else {
414
421
  if (uk->use_key_cache) {
415
422
  key = msgpack_buffer_read_top_as_interned_string(UNPACKER_BUFFER_(uk), &uk->key_cache, length);
@@ -450,19 +457,19 @@ static int read_primitive(msgpack_unpacker_t* uk)
450
457
 
451
458
  SWITCH_RANGE_BEGIN(b)
452
459
  SWITCH_RANGE(b, 0x00, 0x7f) // Positive Fixnum
453
- return object_complete(uk, INT2NUM(b));
460
+ return object_complete_frozen(uk, INT2NUM(b));
454
461
 
455
462
  SWITCH_RANGE(b, 0xe0, 0xff) // Negative Fixnum
456
- return object_complete(uk, INT2NUM((int8_t)b));
463
+ return object_complete_frozen(uk, INT2NUM((int8_t)b));
457
464
 
458
465
  SWITCH_RANGE(b, 0xa0, 0xbf) // FixRaw / fixstr
459
- int count = b & 0x1f;
466
+ size_t count = b & 0x1f;
460
467
  /* read_raw_body_begin sets uk->reading_raw */
461
468
  uk->reading_raw_remaining = count;
462
469
  return read_raw_body_begin(uk, RAW_TYPE_STRING);
463
470
 
464
471
  SWITCH_RANGE(b, 0x90, 0x9f) // FixArray
465
- int count = b & 0x0f;
472
+ size_t count = b & 0x0f;
466
473
  if(count == 0) {
467
474
  return object_complete(uk, rb_ary_new());
468
475
  }
@@ -478,15 +485,15 @@ static int read_primitive(msgpack_unpacker_t* uk)
478
485
  SWITCH_RANGE(b, 0xc0, 0xdf) // Variable
479
486
  switch(b) {
480
487
  case 0xc0: // nil
481
- return object_complete(uk, Qnil);
488
+ return object_complete_frozen(uk, Qnil);
482
489
 
483
490
  //case 0xc1: // string
484
491
 
485
492
  case 0xc2: // false
486
- return object_complete(uk, Qfalse);
493
+ return object_complete_frozen(uk, Qfalse);
487
494
 
488
495
  case 0xc3: // true
489
- return object_complete(uk, Qtrue);
496
+ return object_complete_frozen(uk, Qtrue);
490
497
 
491
498
  case 0xc7: // ext 8
492
499
  {
@@ -542,14 +549,14 @@ static int read_primitive(msgpack_unpacker_t* uk)
542
549
  {
543
550
  READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 1);
544
551
  uint8_t u8 = cb.u8;
545
- return object_complete(uk, INT2NUM((int)u8));
552
+ return object_complete_frozen(uk, INT2NUM((int)u8));
546
553
  }
547
554
 
548
555
  case 0xcd: // unsigned int 16
549
556
  {
550
557
  READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 2);
551
558
  uint16_t u16 = _msgpack_be16(cb.u16);
552
- return object_complete(uk, INT2NUM((int)u16));
559
+ return object_complete_frozen(uk, INT2NUM((int)u16));
553
560
  }
554
561
 
555
562
  case 0xce: // unsigned int 32
@@ -570,14 +577,14 @@ static int read_primitive(msgpack_unpacker_t* uk)
570
577
  {
571
578
  READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 1);
572
579
  int8_t i8 = cb.i8;
573
- return object_complete(uk, INT2NUM((int)i8));
580
+ return object_complete_frozen(uk, INT2NUM((int)i8));
574
581
  }
575
582
 
576
583
  case 0xd1: // signed int 16
577
584
  {
578
585
  READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 2);
579
586
  int16_t i16 = _msgpack_be16(cb.i16);
580
- return object_complete(uk, INT2NUM((int)i16));
587
+ return object_complete_frozen(uk, INT2NUM((int)i16));
581
588
  }
582
589
 
583
590
  case 0xd2: // signed int 32
@@ -638,7 +645,7 @@ static int read_primitive(msgpack_unpacker_t* uk)
638
645
  case 0xd9: // raw 8 / str 8
639
646
  {
640
647
  READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 1);
641
- uint8_t count = cb.u8;
648
+ size_t count = cb.u8;
642
649
  /* read_raw_body_begin sets uk->reading_raw */
643
650
  uk->reading_raw_remaining = count;
644
651
  return read_raw_body_begin(uk, RAW_TYPE_STRING);
@@ -647,7 +654,7 @@ static int read_primitive(msgpack_unpacker_t* uk)
647
654
  case 0xda: // raw 16 / str 16
648
655
  {
649
656
  READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 2);
650
- uint16_t count = _msgpack_be16(cb.u16);
657
+ size_t count = _msgpack_be16(cb.u16);
651
658
  /* read_raw_body_begin sets uk->reading_raw */
652
659
  uk->reading_raw_remaining = count;
653
660
  return read_raw_body_begin(uk, RAW_TYPE_STRING);
@@ -656,7 +663,7 @@ static int read_primitive(msgpack_unpacker_t* uk)
656
663
  case 0xdb: // raw 32 / str 32
657
664
  {
658
665
  READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 4);
659
- uint32_t count = _msgpack_be32(cb.u32);
666
+ size_t count = _msgpack_be32(cb.u32);
660
667
  /* read_raw_body_begin sets uk->reading_raw */
661
668
  uk->reading_raw_remaining = count;
662
669
  return read_raw_body_begin(uk, RAW_TYPE_STRING);
@@ -665,7 +672,7 @@ static int read_primitive(msgpack_unpacker_t* uk)
665
672
  case 0xc4: // bin 8
666
673
  {
667
674
  READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 1);
668
- uint8_t count = cb.u8;
675
+ size_t count = cb.u8;
669
676
  /* read_raw_body_begin sets uk->reading_raw */
670
677
  uk->reading_raw_remaining = count;
671
678
  return read_raw_body_begin(uk, RAW_TYPE_BINARY);
@@ -674,7 +681,7 @@ static int read_primitive(msgpack_unpacker_t* uk)
674
681
  case 0xc5: // bin 16
675
682
  {
676
683
  READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 2);
677
- uint16_t count = _msgpack_be16(cb.u16);
684
+ size_t count = _msgpack_be16(cb.u16);
678
685
  /* read_raw_body_begin sets uk->reading_raw */
679
686
  uk->reading_raw_remaining = count;
680
687
  return read_raw_body_begin(uk, RAW_TYPE_BINARY);
@@ -683,7 +690,7 @@ static int read_primitive(msgpack_unpacker_t* uk)
683
690
  case 0xc6: // bin 32
684
691
  {
685
692
  READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 4);
686
- uint32_t count = _msgpack_be32(cb.u32);
693
+ size_t count = _msgpack_be32(cb.u32);
687
694
  /* read_raw_body_begin sets uk->reading_raw */
688
695
  uk->reading_raw_remaining = count;
689
696
  return read_raw_body_begin(uk, RAW_TYPE_BINARY);
@@ -692,7 +699,7 @@ static int read_primitive(msgpack_unpacker_t* uk)
692
699
  case 0xdc: // array 16
693
700
  {
694
701
  READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 2);
695
- uint16_t count = _msgpack_be16(cb.u16);
702
+ size_t count = _msgpack_be16(cb.u16);
696
703
  if(count == 0) {
697
704
  return object_complete(uk, rb_ary_new());
698
705
  }
@@ -702,7 +709,7 @@ static int read_primitive(msgpack_unpacker_t* uk)
702
709
  case 0xdd: // array 32
703
710
  {
704
711
  READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 4);
705
- uint32_t count = _msgpack_be32(cb.u32);
712
+ size_t count = _msgpack_be32(cb.u32);
706
713
  if(count == 0) {
707
714
  return object_complete(uk, rb_ary_new());
708
715
  }
@@ -712,7 +719,7 @@ static int read_primitive(msgpack_unpacker_t* uk)
712
719
  case 0xde: // map 16
713
720
  {
714
721
  READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 2);
715
- uint16_t count = _msgpack_be16(cb.u16);
722
+ size_t count = _msgpack_be16(cb.u16);
716
723
  if(count == 0) {
717
724
  return object_complete(uk, rb_hash_new());
718
725
  }
@@ -722,7 +729,7 @@ static int read_primitive(msgpack_unpacker_t* uk)
722
729
  case 0xdf: // map 32
723
730
  {
724
731
  READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 4);
725
- uint32_t count = _msgpack_be32(cb.u32);
732
+ size_t count = _msgpack_be32(cb.u32);
726
733
  if(count == 0) {
727
734
  return object_complete(uk, rb_hash_new());
728
735
  }
@@ -897,82 +904,6 @@ int msgpack_unpacker_skip(msgpack_unpacker_t* uk, size_t target_stack_depth)
897
904
  }
898
905
  }
899
906
 
900
- int msgpack_unpacker_peek_next_object_type(msgpack_unpacker_t* uk)
901
- {
902
- int b = get_head_byte(uk);
903
- if(b < 0) {
904
- return b;
905
- }
906
-
907
- SWITCH_RANGE_BEGIN(b)
908
- SWITCH_RANGE(b, 0x00, 0x7f) // Positive Fixnum
909
- return TYPE_INTEGER;
910
-
911
- SWITCH_RANGE(b, 0xe0, 0xff) // Negative Fixnum
912
- return TYPE_INTEGER;
913
-
914
- SWITCH_RANGE(b, 0xa0, 0xbf) // FixRaw
915
- return TYPE_RAW;
916
-
917
- SWITCH_RANGE(b, 0x90, 0x9f) // FixArray
918
- return TYPE_ARRAY;
919
-
920
- SWITCH_RANGE(b, 0x80, 0x8f) // FixMap
921
- return TYPE_MAP;
922
-
923
- SWITCH_RANGE(b, 0xc0, 0xdf) // Variable
924
- switch(b) {
925
- case 0xc0: // nil
926
- return TYPE_NIL;
927
-
928
- case 0xc2: // false
929
- case 0xc3: // true
930
- return TYPE_BOOLEAN;
931
-
932
- case 0xca: // float
933
- case 0xcb: // double
934
- return TYPE_FLOAT;
935
-
936
- case 0xcc: // unsigned int 8
937
- case 0xcd: // unsigned int 16
938
- case 0xce: // unsigned int 32
939
- case 0xcf: // unsigned int 64
940
- return TYPE_INTEGER;
941
-
942
- case 0xd0: // signed int 8
943
- case 0xd1: // signed int 16
944
- case 0xd2: // signed int 32
945
- case 0xd3: // signed int 64
946
- return TYPE_INTEGER;
947
-
948
- case 0xd9: // raw 8 / str 8
949
- case 0xda: // raw 16 / str 16
950
- case 0xdb: // raw 32 / str 32
951
- return TYPE_RAW;
952
-
953
- case 0xc4: // bin 8
954
- case 0xc5: // bin 16
955
- case 0xc6: // bin 32
956
- return TYPE_RAW;
957
-
958
- case 0xdc: // array 16
959
- case 0xdd: // array 32
960
- return TYPE_ARRAY;
961
-
962
- case 0xde: // map 16
963
- case 0xdf: // map 32
964
- return TYPE_MAP;
965
-
966
- default:
967
- return PRIMITIVE_INVALID_BYTE;
968
- }
969
-
970
- SWITCH_RANGE_DEFAULT
971
- return PRIMITIVE_INVALID_BYTE;
972
-
973
- SWITCH_RANGE_END
974
- }
975
-
976
907
  int msgpack_unpacker_skip_nil(msgpack_unpacker_t* uk)
977
908
  {
978
909
  int b = get_head_byte(uk);
@@ -77,16 +77,6 @@ struct msgpack_unpacker_t {
77
77
 
78
78
  #define UNPACKER_BUFFER_(uk) (&(uk)->buffer)
79
79
 
80
- enum msgpack_unpacker_object_type {
81
- TYPE_NIL = 0,
82
- TYPE_BOOLEAN,
83
- TYPE_INTEGER,
84
- TYPE_FLOAT,
85
- TYPE_RAW,
86
- TYPE_ARRAY,
87
- TYPE_MAP,
88
- };
89
-
90
80
  void msgpack_unpacker_static_init(void);
91
81
 
92
82
  void msgpack_unpacker_static_destroy(void);
@@ -139,9 +129,6 @@ static inline VALUE msgpack_unpacker_get_last_object(msgpack_unpacker_t* uk)
139
129
  return uk->last_object;
140
130
  }
141
131
 
142
-
143
- int msgpack_unpacker_peek_next_object_type(msgpack_unpacker_t* uk);
144
-
145
132
  int msgpack_unpacker_skip_nil(msgpack_unpacker_t* uk);
146
133
 
147
134
  int msgpack_unpacker_read_array_header(msgpack_unpacker_t* uk, uint32_t* result_size);
@@ -1,5 +1,5 @@
1
1
  module MessagePack
2
- VERSION = "1.8.2"
2
+ VERSION = "1.8.4"
3
3
  # Note for maintainers:
4
4
  # Don't miss building/releasing the JRuby version (rake buld:java)
5
5
  # See "How to build -java rubygems" in README for more details.
data/msgpack.gemspec CHANGED
@@ -29,13 +29,4 @@ Gem::Specification.new do |s|
29
29
  "documentation_uri" => "https://github.com/msgpack/msgpack/blob/master/spec.md",
30
30
  "source_code_uri" => "https://github.com/msgpack/msgpack-ruby"
31
31
  }
32
-
33
- s.add_development_dependency 'bundler'
34
- s.add_development_dependency 'rake'
35
- s.add_development_dependency 'rake-compiler', ['>= 1.1.9']
36
- s.add_development_dependency 'rspec', ['~> 3.3']
37
- s.add_development_dependency 'ruby_memcheck'
38
- s.add_development_dependency 'yard'
39
- s.add_development_dependency 'json'
40
- s.add_development_dependency 'benchmark-ips', ['~> 2.10.0']
41
32
  end
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: 1.8.2
4
+ version: 1.8.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
@@ -10,119 +10,7 @@ authors:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
  date: 1980-01-02 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: bundler
16
- requirement: !ruby/object:Gem::Requirement
17
- requirements:
18
- - - ">="
19
- - !ruby/object:Gem::Version
20
- version: '0'
21
- type: :development
22
- prerelease: false
23
- version_requirements: !ruby/object:Gem::Requirement
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- version: '0'
28
- - !ruby/object:Gem::Dependency
29
- name: rake
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: '0'
35
- type: :development
36
- prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - ">="
40
- - !ruby/object:Gem::Version
41
- version: '0'
42
- - !ruby/object:Gem::Dependency
43
- name: rake-compiler
44
- requirement: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - ">="
47
- - !ruby/object:Gem::Version
48
- version: 1.1.9
49
- type: :development
50
- prerelease: false
51
- version_requirements: !ruby/object:Gem::Requirement
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- version: 1.1.9
56
- - !ruby/object:Gem::Dependency
57
- name: rspec
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - "~>"
61
- - !ruby/object:Gem::Version
62
- version: '3.3'
63
- type: :development
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - "~>"
68
- - !ruby/object:Gem::Version
69
- version: '3.3'
70
- - !ruby/object:Gem::Dependency
71
- name: ruby_memcheck
72
- requirement: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- version: '0'
77
- type: :development
78
- prerelease: false
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - ">="
82
- - !ruby/object:Gem::Version
83
- version: '0'
84
- - !ruby/object:Gem::Dependency
85
- name: yard
86
- requirement: !ruby/object:Gem::Requirement
87
- requirements:
88
- - - ">="
89
- - !ruby/object:Gem::Version
90
- version: '0'
91
- type: :development
92
- prerelease: false
93
- version_requirements: !ruby/object:Gem::Requirement
94
- requirements:
95
- - - ">="
96
- - !ruby/object:Gem::Version
97
- version: '0'
98
- - !ruby/object:Gem::Dependency
99
- name: json
100
- requirement: !ruby/object:Gem::Requirement
101
- requirements:
102
- - - ">="
103
- - !ruby/object:Gem::Version
104
- version: '0'
105
- type: :development
106
- prerelease: false
107
- version_requirements: !ruby/object:Gem::Requirement
108
- requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- version: '0'
112
- - !ruby/object:Gem::Dependency
113
- name: benchmark-ips
114
- requirement: !ruby/object:Gem::Requirement
115
- requirements:
116
- - - "~>"
117
- - !ruby/object:Gem::Version
118
- version: 2.10.0
119
- type: :development
120
- prerelease: false
121
- version_requirements: !ruby/object:Gem::Requirement
122
- requirements:
123
- - - "~>"
124
- - !ruby/object:Gem::Version
125
- version: 2.10.0
13
+ dependencies: []
126
14
  description: MessagePack is a binary-based efficient object serialization library.
127
15
  It enables to exchange structured objects between many languages like JSON. But
128
16
  unlike JSON, it is very fast and small.
@@ -210,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
210
98
  - !ruby/object:Gem::Version
211
99
  version: '0'
212
100
  requirements: []
213
- rubygems_version: 4.0.12
101
+ rubygems_version: 4.0.16
214
102
  specification_version: 4
215
103
  summary: MessagePack, a binary-based efficient data interchange format.
216
104
  test_files: []