script: pushdata.

This commit is contained in:
Christopher Jeffrey 2016-03-26 05:23:04 -07:00
parent 430e917b79
commit 19f2af16d4

View File

@ -1237,10 +1237,10 @@ Script.checkPush = function checkPush(value, flags) {
return pushdata.opcode == null && pushdata.len === value.length;
if (value.length <= 255)
return pushdata.opcode === 'pushdata1';
return pushdata.opcode === constants.opcodes.pushdata1;
if (value.length <= 65535)
return pushdata.opcode === 'pushdata2';
return pushdata.opcode === constants.opcodes.pushdata2;
return true;
};
@ -2596,7 +2596,7 @@ Script.sign = function sign(msg, key, type) {
Script.decode = function decode(buf) {
var code = [];
var off = 0;
var b, opcode, len;
var b, len;
assert(Buffer.isBuffer(buf));
@ -2637,48 +2637,46 @@ Script.decode = function decode(buf) {
continue;
}
opcode = constants.opcodesByVal[b];
if (off >= buf.length) {
code.push(opcode || b);
code.push(constants.opcodesByVal[b] || b);
continue;
}
if (opcode === 'pushdata1') {
if (b === constants.opcodes.pushdata1) {
len = buf[off];
off += 1;
code.push(buf.slice(off, off + len));
off += len;
if (len <= 0x4b || off > buf.length) {
utils.hidden(code[code.length - 1], 'pushdata', {
opcode: opcode,
opcode: b,
len: len
});
}
} else if (opcode === 'pushdata2') {
} else if (b === constants.opcodes.pushdata2) {
len = utils.readU16(buf, off);
off += 2;
code.push(buf.slice(off, off + len));
off += len;
if (len <= 0xff || off > buf.length) {
utils.hidden(code[code.length - 1], 'pushdata', {
opcode: opcode,
opcode: b,
len: len
});
}
} else if (opcode === 'pushdata4') {
} else if (b === constants.opcodes.pushdata4) {
len = utils.readU32(buf, off);
off += 4;
code.push(buf.slice(off, off + len));
off += len;
if (len <= 0xffff || off > buf.length) {
utils.hidden(code[code.length - 1], 'pushdata', {
opcode: opcode,
opcode: b,
len: len
});
}
} else {
code.push(opcode || b);
code.push(constants.opcodesByVal[b] || b);
}
}
@ -2704,15 +2702,15 @@ Script.encode = function encode(code) {
if (op.pushdata.opcode === null) {
p.writeU8(op.pushdata.len);
p.writeBytes(op);
} else if (op.pushdata.opcode === 'pushdata1') {
} else if (op.pushdata.opcode === opcodes.pushdata1) {
p.writeU8(opcodes.pushdata1);
p.writeU8(op.pushdata.len);
p.writeBytes(op);
} else if (op.pushdata.opcode === 'pushdata2') {
} else if (op.pushdata.opcode === opcodes.pushdata2) {
p.writeU8(opcodes.pushdata2);
p.writeU16(op.pushdata.len);
p.writeBytes(op);
} else if (op.pushdata.opcode === 'pushdata4') {
} else if (op.pushdata.opcode === opcodes.pushdata4) {
p.writeU8(opcodes.pushdata4);
p.writeU32(op.pushdata.len);
p.writeBytes(op);