@@ -422,56 +422,53 @@ msgpack_unpack_func(int, _execute)(msgpack_unpack_struct(_context)* ctx, const c
422
422
template <unsigned int fixed_offset, unsigned int var_offset>
423
423
msgpack_unpack_func (int , _container_header)(msgpack_unpack_struct (_context)* ctx, const char * data, size_t len, size_t * off)
424
424
{
425
- for (;;) {
426
- if (len < *off) {
427
- return 0 ;
428
- }
429
- uint32_t size;
430
- const unsigned char *const p = (unsigned char *)data + *off;
425
+ assert (len >= *off);
426
+ uint32_t size;
427
+ const unsigned char *const p = (unsigned char *)data + *off;
431
428
432
429
#define inc_offset (inc ) \
433
- if (len - *off < inc) \
434
- return 0 ; \
435
- *off += inc;
436
-
437
- switch (*p) {
438
- case var_offset:
439
- inc_offset (3 );
440
- size = _msgpack_load16 (uint16_t , p + 1 );
441
- break ;
442
- case var_offset + 1 :
443
- inc_offset (5 );
444
- size = _msgpack_load32 (uint32_t , p + 1 );
445
- break ;
430
+ if (len - *off < inc) \
431
+ return 0 ; \
432
+ *off += inc;
433
+
434
+ switch (*p) {
435
+ case var_offset:
436
+ inc_offset (3 );
437
+ size = _msgpack_load16 (uint16_t , p + 1 );
438
+ break ;
439
+ case var_offset + 1 :
440
+ inc_offset (5 );
441
+ size = _msgpack_load32 (uint32_t , p + 1 );
442
+ break ;
446
443
#ifdef USE_CASE_RANGE
447
- case fixed_offset + 0x0 ... fixed_offset + 0xf :
444
+ case fixed_offset + 0x0 ... fixed_offset + 0xf :
448
445
#else
449
- case fixed_offset + 0x0 :
450
- case fixed_offset + 0x1 :
451
- case fixed_offset + 0x2 :
452
- case fixed_offset + 0x3 :
453
- case fixed_offset + 0x4 :
454
- case fixed_offset + 0x5 :
455
- case fixed_offset + 0x6 :
456
- case fixed_offset + 0x7 :
457
- case fixed_offset + 0x8 :
458
- case fixed_offset + 0x9 :
459
- case fixed_offset + 0xa :
460
- case fixed_offset + 0xb :
461
- case fixed_offset + 0xc :
462
- case fixed_offset + 0xd :
463
- case fixed_offset + 0xe :
464
- case fixed_offset + 0xf :
446
+ case fixed_offset + 0x0 :
447
+ case fixed_offset + 0x1 :
448
+ case fixed_offset + 0x2 :
449
+ case fixed_offset + 0x3 :
450
+ case fixed_offset + 0x4 :
451
+ case fixed_offset + 0x5 :
452
+ case fixed_offset + 0x6 :
453
+ case fixed_offset + 0x7 :
454
+ case fixed_offset + 0x8 :
455
+ case fixed_offset + 0x9 :
456
+ case fixed_offset + 0xa :
457
+ case fixed_offset + 0xb :
458
+ case fixed_offset + 0xc :
459
+ case fixed_offset + 0xd :
460
+ case fixed_offset + 0xe :
461
+ case fixed_offset + 0xf :
465
462
#endif
466
- ++*off;
467
- size = ((unsigned int )*p) & 0x0f ;
468
- break ;
469
- default :
470
- continue ;
471
- }
472
- msgpack_unpack_callback (_uint32)(&ctx-> user , size, &ctx-> stack [ 0 ]. obj );
473
- return 1 ;
474
- }
463
+ ++*off;
464
+ size = ((unsigned int )*p) & 0x0f ;
465
+ break ;
466
+ default :
467
+ PyErr_SetString (PyExc_ValueError, " Unexpected type header on stream " ) ;
468
+ return - 1 ;
469
+ }
470
+ msgpack_unpack_callback (_uint32)(&ctx-> user , size, &ctx-> stack [ 0 ]. obj ) ;
471
+ return 1 ;
475
472
}
476
473
477
474
#undef SWITCH_RANGE_BEGIN
0 commit comments