Browse Source

script parsing should be more loose on pushdata

This testnet transaction was being parsed incorrectly:

cc64de74ba7002bbf4e3646824d7bbf0920004fb2ce45aa7270c4116ff11b715

Script was throwing an error when it should not have been. The error was that
PUSHDATA1 was trying to push 117 bytes to the stack, but it was followed by
only 75 bytes. But this transaction is accepted as valid by bitcoin-qt on
testnet. So we are mistaken by throwing an error in this case.
patch-2
Ryan X. Charles 11 years ago
parent
commit
f89dcda0a2
  1. 3
      Script.js

3
Script.js

@ -58,17 +58,14 @@ Script.prototype.parse = function() {
} else if (opcode === OP_PUSHDATA1) {
len = parser.word8();
chunk = parser.buffer(len);
if (chunk.length < len) throw new Error('Invalid data size: not enough data');
this.chunks.push(chunk);
} else if (opcode === OP_PUSHDATA2) {
len = parser.word16le();
chunk = parser.buffer(len);
if (chunk.length < len) throw new Error('Invalid data size: not enough data');
this.chunks.push(chunk);
} else if (opcode === OP_PUSHDATA4) {
len = parser.word32le();
chunk = parser.buffer(len);
if (chunk.length < len) throw new Error('Invalid data size: not enough data');
this.chunks.push(chunk);
} else {
this.chunks.push(opcode);

Loading…
Cancel
Save