diff --git a/lib/bcoin/script.js b/lib/bcoin/script.js index bbc3006c..cc05972a 100644 --- a/lib/bcoin/script.js +++ b/lib/bcoin/script.js @@ -2814,6 +2814,8 @@ Script.encode = function encode(code) { p.writeU8(opcodes.OP_PUSHDATA4); p.writeU32(op.pushdata.size); p.writeBytes(op); + } else { + assert(false, 'Bad pushdata op.'); } continue; } @@ -2821,6 +2823,18 @@ Script.encode = function encode(code) { if (op.length === 0) { p.writeU8(opcodes.OP_0); } else if (op.length <= 0x4b) { + if (op.length === 1) { + if (op[0] === 0) { + p.writeU8(opcodes.OP_0); + continue; + } else if (op[0] >= 1 && op[0] <= 16) { + p.writeU8(op[0] + 0x50); + continue; + } else if (op[0] === 0xff) { + p.writeU8(opcodes.OP_1NEGATE); + continue; + } + } p.writeU8(op.length); p.writeBytes(op); } else if (op.length <= 0xff) { @@ -2831,10 +2845,12 @@ Script.encode = function encode(code) { p.writeU8(opcodes.OP_PUSHDATA2); p.writeU16(op.length); p.writeBytes(op); - } else { + } else if (op.length <= 0xffffffff) { p.writeU8(opcodes.OP_PUSHDATA4); p.writeU32(op.length); p.writeBytes(op); + } else { + assert(false, 'Bad pushdata op.'); } continue; } diff --git a/lib/bcoin/utils.js b/lib/bcoin/utils.js index 475289ce..76684f36 100644 --- a/lib/bcoin/utils.js +++ b/lib/bcoin/utils.js @@ -1501,7 +1501,7 @@ utils.writeVarint = function writeVarint(dst, num, off) { off = off >>> 0; if (bn.isBN(num)) { - if (num.cmpn(0xffffffff) > 0) { + if (num.cmp(utils.U32) > 0) { dst[off] = 0xff; utils.writeU64(dst, num, off + 1); return 9; @@ -1540,7 +1540,7 @@ utils.writeVarint = function writeVarint(dst, num, off) { utils.sizeVarint = function sizeVarint(num) { if (bn.isBN(num)) { - if (num.cmpn(0xffffffff) > 0) + if (num.cmp(utils.U32) > 0) return 9; num = num.toNumber(); }