From 559cb628895912179a88516537e62004a3a2408c Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Tue, 17 May 2016 15:17:39 -0700 Subject: [PATCH] varint. misc. --- lib/bcoin/reader.js | 10 +++------- lib/bcoin/utils.js | 34 +++++++++++++++++----------------- lib/bcoin/writer.js | 2 ++ 3 files changed, 22 insertions(+), 24 deletions(-) diff --git a/lib/bcoin/reader.js b/lib/bcoin/reader.js index 42f84038..de089196 100644 --- a/lib/bcoin/reader.js +++ b/lib/bcoin/reader.js @@ -474,13 +474,9 @@ BufferReader.prototype.readDoubleBE = function readDoubleBE() { */ BufferReader.prototype.readVarint = function readVarint(big) { - var result; - assert(this.offset + 1 <= this.data.length); - result = utils.readVarint(this.data, this.offset, big); - assert(result.off <= this.data.length); - assert(result.r >= 0); - this.offset = result.off; - return result.r; + var result = utils.readVarint(this.data, this.offset, big); + this.offset += result.size; + return result.value; }; /** diff --git a/lib/bcoin/utils.js b/lib/bcoin/utils.js index 2aec0c82..15133ebe 100644 --- a/lib/bcoin/utils.js +++ b/lib/bcoin/utils.js @@ -2018,41 +2018,41 @@ utils.write64BE = function write64BE(dst, num, off) { */ utils.readVarint = function readVarint(data, off, big) { - var r, bytes; + var value, size; off = off >>> 0; assert(off < data.length); if (data[off] < 0xfd) { - r = data[off]; + size = 1; + value = data[off]; if (big) - r = new bn(r); - bytes = 1; + value = new bn(value); } else if (data[off] === 0xfd) { - assert(off + 2 < data.length); - r = data[off + 1] | (data[off + 2] << 8); + size = 3; + assert(off + size <= data.length); + value = data[off + 1] | (data[off + 2] << 8); if (big) - r = new bn(r); - bytes = 3; + value = new bn(value); } else if (data[off] === 0xfe) { - assert(off + 4 < data.length); - r = utils.readU32(data, off + 1); + size = 5; + assert(off + size <= data.length); + value = utils.readU32(data, off + 1); if (big) - r = new bn(r); - bytes = 5; + value = new bn(value); } else if (data[off] === 0xff) { - assert(off + 8 < data.length); + size = 9; + assert(off + size <= data.length); if (big) - r = utils.readU64(data, off + 1); + value = utils.readU64(data, off + 1); else - r = utils.readU64N(data, off + 1); - bytes = 9; + value = utils.readU64N(data, off + 1); } else { assert(false, 'Malformed varint.'); } - return { off: off + bytes, r: r }; + return { size: size, value: value }; }; /** diff --git a/lib/bcoin/writer.js b/lib/bcoin/writer.js index 025f1237..b9538c8b 100644 --- a/lib/bcoin/writer.js +++ b/lib/bcoin/writer.js @@ -112,6 +112,8 @@ BufferWriter.prototype.render = function render(keep) { } } + assert(off === data.length); + if (!keep) this.destroy();