handle varInts better
This commit is contained in:
parent
4cff6a41f4
commit
ddc9e2d2a4
|
@ -70,7 +70,7 @@ BufferReader.prototype.readVarInt = function() {
|
|||
case 0xFE:
|
||||
return this.readUInt32LE();
|
||||
case 0xFF:
|
||||
return this.readUInt64LEBN().toNumber();
|
||||
throw new Error('number too large to retain precision - use readVarIntBN');
|
||||
default:
|
||||
return first;
|
||||
}
|
||||
|
|
|
@ -56,7 +56,6 @@ BufferWriter.prototype.writeUInt64BEBN = function(bn) {
|
|||
return this;
|
||||
};
|
||||
|
||||
//TODO: What if n is so large that it loses precision?
|
||||
BufferWriter.prototype.writeUInt64LEBN = function(bn) {
|
||||
var buf = bn.toBuffer({size: 8});
|
||||
var reversebuf = new Buffer(Array.apply(new Array(), buf).reverse());
|
||||
|
@ -76,7 +75,6 @@ BufferWriter.prototype.writeVarIntBN = function(bn) {
|
|||
return this;
|
||||
};
|
||||
|
||||
//TODO: What if n is so large that it loses precision?
|
||||
BufferWriter.varIntBuf = function(n) {
|
||||
var buf = undefined;
|
||||
if (n < 253) {
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
var BufferWriter = require('../lib/bufferwriter');
|
||||
var BufferReader = require('../lib/bufferreader');
|
||||
var should = require('chai').should();
|
||||
|
||||
|
@ -156,10 +157,12 @@ describe('BufferReader', function() {
|
|||
br.readVarInt().should.equal(50000);
|
||||
});
|
||||
|
||||
it('should read a 9 byte varint', function() {
|
||||
it('should throw an error on a 9 byte varint', function() {
|
||||
var buf = Buffer.concat([new Buffer([255]), new Buffer('ffffffffffffffff', 'hex')]);
|
||||
var br = new BufferReader(buf);
|
||||
br.readVarInt().should.equal(Math.pow(2, 64));
|
||||
(function() {
|
||||
br.readVarInt();
|
||||
}).should.throw('number too large to retain precision - use readVarIntBN');
|
||||
});
|
||||
|
||||
});
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
var BufferWriter = require('../lib/bufferwriter');
|
||||
var BufferReader = require('../lib/bufferreader');
|
||||
var BN = require('../lib/bn');
|
||||
var should = require('chai').should();
|
||||
|
||||
|
@ -120,6 +121,15 @@ describe('BufferWriter', function() {
|
|||
bw.concat().length.should.equal(9);
|
||||
});
|
||||
|
||||
it('should read back the same value it wrote for a 9 byte varInt', function() {
|
||||
var bw = new BufferWriter();
|
||||
var n = Math.pow(2, 53);
|
||||
n.should.equal(n + 1); //javascript number precision limit
|
||||
bw.writeVarInt(n);
|
||||
var br = new BufferReader(bw.concat());
|
||||
br.readVarIntBN().toNumber().should.equal(n);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('#writeVarIntBN', function() {
|
||||
|
|
Loading…
Reference in New Issue