Test redundant varint fields decoding in JS.
Varints are generally encoded in minimum possible length but need to ensure that any redundancy does not break fields decoder.
This commit is contained in:
parent
371d341c7e
commit
5d54a852eb
@ -359,6 +359,58 @@ describe('binaryReaderTest', function() {
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Tests reading a field from hexadecimal string (format: '08 BE EF').
|
||||
* @param {Function} readField
|
||||
* @param {number} expected
|
||||
* @param {string} hexString
|
||||
*/
|
||||
function doTestHexStringVarint_(readField, expected, hexString) {
|
||||
var bytesCount = (hexString.length + 1) / 3;
|
||||
var bytes = new Uint8Array(bytesCount);
|
||||
for (var i = 0; i < bytesCount; i++) {
|
||||
byte = parseInt(hexString.substring(i * 3, i * 3 + 2), 16);
|
||||
bytes[i] = byte;
|
||||
}
|
||||
var reader = jspb.BinaryReader.alloc(bytes);
|
||||
reader.nextField();
|
||||
assertEquals(expected, readField.call(reader));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Tests non-canonical redundant varint decoding.
|
||||
*/
|
||||
it('testRedundantVarintFields', function() {
|
||||
assertNotNull(jspb.BinaryReader.prototype.readUint32);
|
||||
assertNotNull(jspb.BinaryReader.prototype.readUint64);
|
||||
assertNotNull(jspb.BinaryReader.prototype.readSint32);
|
||||
assertNotNull(jspb.BinaryReader.prototype.readSint64);
|
||||
|
||||
// uint32 and sint32 take no more than 5 bytes
|
||||
// 08 - field prefix (type = 0 means varint)
|
||||
doTestHexStringVarint_(
|
||||
jspb.BinaryReader.prototype.readUint32,
|
||||
12, '08 8C 80 80 80 00');
|
||||
|
||||
// 11 stands for -6 in zigzag encoding
|
||||
doTestHexStringVarint_(
|
||||
jspb.BinaryReader.prototype.readSint32,
|
||||
-6, '08 8B 80 80 80 00');
|
||||
|
||||
// uint64 and sint64 take no more than 10 bytes
|
||||
// 08 - field prefix (type = 0 means varint)
|
||||
doTestHexStringVarint_(
|
||||
jspb.BinaryReader.prototype.readUint64,
|
||||
12, '08 8C 80 80 80 80 80 80 80 80 00');
|
||||
|
||||
// 11 stands for -6 in zigzag encoding
|
||||
doTestHexStringVarint_(
|
||||
jspb.BinaryReader.prototype.readSint64,
|
||||
-6, '08 8B 80 80 80 80 80 80 80 80 00');
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Tests 64-bit fields that are handled as strings.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user