summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authordearblue <[email protected]>2020-11-30 22:41:05 +0900
committerdearblue <[email protected]>2020-11-30 22:56:41 +0900
commita56b601f5695f8d7522742cfc1f692d4d610c245 (patch)
tree5f38f4941932b901d5b906ae67d62107c18dfc98 /src
parent9f5c0777f17fe8caff89cef75f2056262e708349 (diff)
downloadmruby-a56b601f5695f8d7522742cfc1f692d4d610c245.tar.gz
mruby-a56b601f5695f8d7522742cfc1f692d4d610c245.zip
Fixed irep size measurement by dump; ref #5203
Diffstat (limited to 'src')
-rw-r--r--src/dump.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/dump.c b/src/dump.c
index 03aa04c54..c5171beb6 100644
--- a/src/dump.c
+++ b/src/dump.c
@@ -136,8 +136,9 @@ get_pool_block_size(mrb_state *mrb, const mrb_irep *irep)
default: /* packed IREP_TT_STRING */
{
- mrb_int len = irep->pool[pool_no].tt >> 1; /* unpack length */
+ mrb_int len = irep->pool[pool_no].tt >> 2; /* unpack length */
mrb_assert_int_fit(mrb_int, len, size_t, SIZE_MAX);
+ size += sizeof(uint16_t);
size += (size_t)len+1;
}
break;
@@ -293,7 +294,6 @@ get_irep_record_size_1(mrb_state *mrb, const mrb_irep *irep)
size_t size = 0;
size += get_irep_header_size(mrb);
- size += sizeof(uint16_t);
size += get_iseq_block_size(mrb, irep);
size += get_catch_table_block_size(mrb, irep);
size += get_pool_block_size(mrb, irep);
@@ -393,6 +393,7 @@ write_section_irep(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, size_t *l
if (result != MRB_DUMP_OK) {
return result;
}
+ mrb_assert(rsize == get_irep_record_size(mrb, irep));
*len_p = cur - bin + rsize;
write_section_irep_header(mrb, *len_p, bin);