summaryrefslogtreecommitdiffhomepage
path: root/src/load.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/load.c')
-rw-r--r--src/load.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/load.c b/src/load.c
index 89a5f7cd2..8dea4a391 100644
--- a/src/load.c
+++ b/src/load.c
@@ -411,12 +411,18 @@ read_lv_record(mrb_state *mrb, const uint8_t *start, mrb_irep *irep, size_t *rec
for (i = 0; i + 1< irep->nlocals; ++i) {
uint16_t const sym_idx = bin_to_uint16(bin);
bin += sizeof(uint16_t);
- if (sym_idx >= syms_len) {
- return MRB_DUMP_GENERAL_FAILURE;
+ if (sym_idx == RITE_LV_NULL_MARK) {
+ irep->lv[i].name = 0;
+ irep->lv[i].r = 0;
}
- irep->lv[i].name = syms[sym_idx];
+ else {
+ if (sym_idx >= syms_len) {
+ return MRB_DUMP_GENERAL_FAILURE;
+ }
+ irep->lv[i].name = syms[sym_idx];
- irep->lv[i].r = bin_to_uint16(bin);
+ irep->lv[i].r = bin_to_uint16(bin);
+ }
bin += sizeof(uint16_t);
}
@@ -717,7 +723,7 @@ mrb_read_irep_file(mrb_state *mrb, FILE* fp)
/* verify CRC */
fpos = ftell(fp);
/* You don't need use SIZE_ERROR as block_size is enough small. */
- for (i = 0; i < block_fallback_count; i++,block_size >>= 1){
+ for (i = 0; i < block_fallback_count; i++,block_size >>= 1) {
buf = (uint8_t*)mrb_malloc_simple(mrb, block_size);
if (buf) break;
}
@@ -808,7 +814,7 @@ mrb_load_irep_file_cxt(mrb_state *mrb, FILE* fp, mrbc_context *c)
}
proc = mrb_proc_new(mrb, irep);
mrb_irep_decref(mrb, irep);
- if (c->dump_result) mrb_codedump_all(mrb, proc);
+ if (c && c->dump_result) mrb_codedump_all(mrb, proc);
if (c && c->no_exec) return mrb_obj_value(proc);
val = mrb_toplevel_run(mrb, proc);
return val;