btcs

bitcoin script parser/evaluator/compiler/decompiler
git clone git://jb55.com/btcs
Log | Files | Refs | README | LICENSE

commit 9166df41d0892f915cd386989fb25f4ffda4408e
parent 959e3cf982e564cd5f4791fe3205faeda805935f
Author: William Casarin <jb55@jb55.com>
Date:   Thu, 21 Dec 2017 06:44:12 -0800

op_size: fix

Diffstat:
Mscript.c | 6+++---
Mval.c | 14++++++++++++++
Mval.h | 1+
3 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/script.c b/script.c @@ -479,9 +479,9 @@ script_eval(const u8 *script, size_t script_size, struct stack *stack, // (in -- in size) if (stack_size(stack) < 1) SCRIPTERR("INVALID_STACK_OPERATION"); - struct num sn; - sn_from_int(stack_size(stack) - 1, &sn); - struct val val = sn_to_val(&sn); + struct val val = stack_top_val(stack, -1); + u32 size = val_size(val); + val = val_from_int(size); stack_push_val(stack, val); } break; diff --git a/val.c b/val.c @@ -159,6 +159,20 @@ val_copy(struct val a) { } } +u32 +val_size(struct val val) { + u8 *data; + u32 len; + + switch (val.type) { + case VT_DATA: + data = byte_pool_get(val.ind, &len); + return len; + default: + return 1; + } +} + /* struct val */ /* val_int(s64 n) { */ /* struct val val; */ diff --git a/val.h b/val.h @@ -32,6 +32,7 @@ struct val { STATIC_ASSERT(sizeof(struct val) <= 4, val_doesnt_fit_in_stack); struct val val_copy(struct val a); +u32 val_size(struct val val); int val_eq(struct val a, struct val b, int require_minimal);