Skip to content

Commit 842f61a

Browse files
committed
Merge #11900: [script] simplify CheckMinimalPush checks, add safety assert
0749808 CheckMinimalPush comments are prescriptive (Gregory Sanders) 176db61 simplify CheckMinimalPush checks, add safety assert (Gregory Sanders) Pull request description: the two conditions could simply never be hit as `true`, as those opcodes have a push payload of size 0 in `data`. Added the assert for clarity for future readers(matching the gating in the interpreter) and safety for future use. This effects policy only. Tree-SHA512: f49028a1d5e907ef697b9bf5104c81ba8f6a331dbe5d60d8d8515ac17d2d6bfdc9dcc856a7e3dbd54814871b7d0695584d28da6553e2d9d7715430223f0b3690
2 parents 98bc27f + 0749808 commit 842f61a

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

src/script/interpreter.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -226,23 +226,25 @@ bool static CheckPubKeyEncoding(const valtype &vchPubKey, unsigned int flags, co
226226
}
227227

228228
bool static CheckMinimalPush(const valtype& data, opcodetype opcode) {
229+
// Excludes OP_1NEGATE, OP_1-16 since they are by definition minimal
230+
assert(0 <= opcode && opcode <= OP_PUSHDATA4);
229231
if (data.size() == 0) {
230-
// Could have used OP_0.
232+
// Should have used OP_0.
231233
return opcode == OP_0;
232234
} else if (data.size() == 1 && data[0] >= 1 && data[0] <= 16) {
233-
// Could have used OP_1 .. OP_16.
234-
return opcode == OP_1 + (data[0] - 1);
235+
// Should have used OP_1 .. OP_16.
236+
return false;
235237
} else if (data.size() == 1 && data[0] == 0x81) {
236-
// Could have used OP_1NEGATE.
237-
return opcode == OP_1NEGATE;
238+
// Should have used OP_1NEGATE.
239+
return false;
238240
} else if (data.size() <= 75) {
239-
// Could have used a direct push (opcode indicating number of bytes pushed + those bytes).
241+
// Must have used a direct push (opcode indicating number of bytes pushed + those bytes).
240242
return opcode == data.size();
241243
} else if (data.size() <= 255) {
242-
// Could have used OP_PUSHDATA.
244+
// Must have used OP_PUSHDATA.
243245
return opcode == OP_PUSHDATA1;
244246
} else if (data.size() <= 65535) {
245-
// Could have used OP_PUSHDATA2.
247+
// Must have used OP_PUSHDATA2.
246248
return opcode == OP_PUSHDATA2;
247249
}
248250
return true;

0 commit comments

Comments
 (0)