From 63421ec411f9d74b6af2d5ee7da912379351a7ae Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Sat, 26 Mar 2016 04:21:01 -0700 Subject: [PATCH] only asign hidden values for nonstandard pushes. --- lib/bcoin/script.js | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/lib/bcoin/script.js b/lib/bcoin/script.js index 60045a01..1617a245 100644 --- a/lib/bcoin/script.js +++ b/lib/bcoin/script.js @@ -2620,10 +2620,12 @@ Script.decode = function decode(buf) { if (b >= 0x01 && b <= 0x4b) { code.push(buf.slice(off, off + b)); off += b; - utils.hidden(code[code.length - 1], 'pushdata', { - opcode: null, - len: b - }); + if (off > buf.length) { + utils.hidden(code[code.length - 1], 'pushdata', { + opcode: null, + len: b + }); + } continue; } @@ -2647,28 +2649,34 @@ Script.decode = function decode(buf) { off += 1; code.push(buf.slice(off, off + len)); off += len; - utils.hidden(code[code.length - 1], 'pushdata', { - opcode: opcode, - len: len - }); + if (len <= 0x4b || off > buf.length) { + utils.hidden(code[code.length - 1], 'pushdata', { + opcode: opcode, + len: len + }); + } } else if (opcode === 'pushdata2') { len = utils.readU16(buf, off); off += 2; code.push(buf.slice(off, off + len)); off += len; - utils.hidden(code[code.length - 1], 'pushdata', { - opcode: opcode, - len: len - }); + if (len <= 0xff || off > buf.length) { + utils.hidden(code[code.length - 1], 'pushdata', { + opcode: opcode, + len: len + }); + } } else if (opcode === 'pushdata4') { len = utils.readU32(buf, off); off += 4; code.push(buf.slice(off, off + len)); off += len; - utils.hidden(code[code.length - 1], 'pushdata', { - opcode: opcode, - len: len - }); + if (len <= 0xffff || off > buf.length) { + utils.hidden(code[code.length - 1], 'pushdata', { + opcode: opcode, + len: len + }); + } } else { code.push(opcode || b); }