diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/load.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/load.c b/src/load.c index cb36c9914..6a173788a 100644 --- a/src/load.c +++ b/src/load.c @@ -234,9 +234,12 @@ read_rite_lineno_record(mrb_state *mrb, const uint8_t *bin, size_t irepno, uint3 short *lines; ret = MRB_DUMP_OK; + *len = 0; bin += sizeof(uint32_t); // record size + *len += sizeof(uint32_t); fname_len = bin_to_uint16(bin); bin += sizeof(uint16_t); + *len += sizeof(uint16_t); fname = (char *)mrb_malloc(mrb, fname_len + 1); if (fname == NULL) { ret = MRB_DUMP_GENERAL_FAILURE; @@ -245,15 +248,18 @@ read_rite_lineno_record(mrb_state *mrb, const uint8_t *bin, size_t irepno, uint3 memcpy(fname, bin, fname_len); fname[fname_len] = '\0'; bin += fname_len; + *len += fname_len; niseq = bin_to_uint32(bin); bin += sizeof(uint32_t); // niseq + *len += sizeof(uint32_t); lines = (short *)mrb_malloc(mrb, niseq * sizeof(short)); for (i = 0; i < niseq; i++) { lines[i] = bin_to_uint16(bin); - bin += sizeof(short); // niseq - } + bin += sizeof(uint16_t); // niseq + *len += sizeof(uint16_t); + } mrb->irep[irepno]->filename = fname; mrb->irep[irepno]->lines = lines; |
