@@ -322,6 +322,7 @@ protected void parseObject(boolean small, JsonFormatter formatter)
322
322
// Read the header ...
323
323
int numElements = readUnsignedIndex (Integer .MAX_VALUE , small , "number of elements in" );
324
324
int numBytes = readUnsignedIndex (Integer .MAX_VALUE , small , "size of" );
325
+ int valueSize = small ? 2 : 4 ;
325
326
326
327
// Read each key-entry, consisting of the offset and length of each key ...
327
328
int [] keyLengths = new int [numElements ];
@@ -338,19 +339,25 @@ protected void parseObject(boolean small, JsonFormatter formatter)
338
339
switch (type ) {
339
340
case LITERAL :
340
341
entries [i ] = new ValueEntry (type ).setValue (readLiteral ());
342
+ reader .skip (valueSize - 1 );
341
343
break ;
342
344
case INT16 :
345
+ entries [i ] = new ValueEntry (type ).setValue (readInt16 ());
346
+ reader .skip (valueSize - 2 );
347
+ break ;
343
348
case UINT16 :
344
- // The "offset" is actually the value ...
345
- int value = readUnsignedIndex (Integer .MAX_VALUE , small , "value offset in" );
346
- entries [i ] = new ValueEntry (type ).setValue (value );
349
+ entries [i ] = new ValueEntry (type ).setValue (readUInt16 ());
350
+ reader .skip (valueSize - 2 );
347
351
break ;
348
352
case INT32 :
353
+ if (!small ) {
354
+ entries [i ] = new ValueEntry (type ).setValue (readInt32 ());
355
+ break ;
356
+ }
349
357
case UINT32 :
350
358
if (!small ) {
351
- // The value should be large enough to handle the actual value ...
352
- value = readUnsignedIndex (Integer .MAX_VALUE , small , "value offset in" );
353
- entries [i ] = new ValueEntry (type ).setValue (value );
359
+ entries [i ] = new ValueEntry (type ).setValue (readUInt32 ());
360
+ break ;
354
361
}
355
362
default :
356
363
// It is an offset, not a value ...
@@ -459,6 +466,7 @@ protected void parseArray(boolean small, JsonFormatter formatter)
459
466
// Read the header ...
460
467
int numElements = readUnsignedIndex (Integer .MAX_VALUE , small , "number of elements in" );
461
468
int numBytes = readUnsignedIndex (Integer .MAX_VALUE , small , "size of" );
469
+ int valueSize = small ? 2 : 4 ;
462
470
463
471
// Read each key value value-entry
464
472
ValueEntry [] entries = new ValueEntry [numElements ];
@@ -468,19 +476,25 @@ protected void parseArray(boolean small, JsonFormatter formatter)
468
476
switch (type ) {
469
477
case LITERAL :
470
478
entries [i ] = new ValueEntry (type ).setValue (readLiteral ());
479
+ reader .skip (valueSize - 1 );
471
480
break ;
472
481
case INT16 :
482
+ entries [i ] = new ValueEntry (type ).setValue (readInt16 ());
483
+ reader .skip (valueSize - 2 );
484
+ break ;
473
485
case UINT16 :
474
- // The "offset" is actually the value ...
475
- int value = readUnsignedIndex (Integer .MAX_VALUE , small , "value offset in" );
476
- entries [i ] = new ValueEntry (type ).setValue (value );
486
+ entries [i ] = new ValueEntry (type ).setValue (readUInt16 ());
487
+ reader .skip (valueSize - 2 );
477
488
break ;
478
489
case INT32 :
490
+ if (!small ) {
491
+ entries [i ] = new ValueEntry (type ).setValue (readInt32 ());
492
+ break ;
493
+ }
479
494
case UINT32 :
480
495
if (!small ) {
481
- // The value should be large enough to handle the actual value ...
482
- value = readUnsignedIndex (Integer .MAX_VALUE , small , "value offset in" );
483
- entries [i ] = new ValueEntry (type ).setValue (value );
496
+ entries [i ] = new ValueEntry (type ).setValue (readUInt32 ());
497
+ break ;
484
498
}
485
499
default :
486
500
// It is an offset, not a value ...
0 commit comments