diff options
Diffstat (limited to 'src/dump.c')
| -rw-r--r-- | src/dump.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/dump.c b/src/dump.c index fb5bb5e7c..d96b2778e 100644 --- a/src/dump.c +++ b/src/dump.c @@ -12,7 +12,6 @@ #include "mruby/irep.h" #include "mruby/numeric.h" - static size_t get_irep_record_size(mrb_state *mrb, mrb_irep *irep); @@ -172,7 +171,7 @@ get_syms_block_size(mrb_state *mrb, mrb_irep *irep) { size_t size = 0; size_t sym_no; - int len; + size_t len; size += sizeof(uint32_t); /* slen */ for (sym_no = 0; sym_no < irep->slen; sym_no++) { @@ -189,7 +188,7 @@ get_syms_block_size(mrb_state *mrb, mrb_irep *irep) static int write_syms_block(mrb_state *mrb, mrb_irep *irep, uint8_t *buf) { - int result, len; + int result; size_t sym_no; size_t buf_size; uint8_t *cur = buf; @@ -208,7 +207,10 @@ write_syms_block(mrb_state *mrb, mrb_irep *irep, uint8_t *buf) for (sym_no = 0; sym_no < irep->slen; sym_no++) { if (irep->syms[sym_no] != 0) { + size_t len; + name = mrb_sym2name_len(mrb, irep->syms[sym_no], &len); + if (len > UINT16_MAX) goto error_exit; nlen = (uint16_t)len; if (nlen > buf_size - 1) { buf_size = nlen + 1; @@ -354,14 +356,14 @@ write_rite_binary_header(mrb_state *mrb, size_t binary_size, uint8_t* bin) static int mrb_dump_irep(mrb_state *mrb, size_t start_index, uint8_t **bin, size_t *bin_size) { - int result; + int result = MRB_DUMP_GENERAL_FAILURE; size_t section_irep_size; size_t irep_no; uint8_t *cur = NULL; if (mrb == NULL || start_index >= mrb->irep_len) { *bin = NULL; - goto error_exit; + return MRB_DUMP_GENERAL_FAILURE; } section_irep_size = sizeof(struct rite_section_irep_header); @@ -388,7 +390,7 @@ mrb_dump_irep(mrb_state *mrb, size_t start_index, uint8_t **bin, size_t *bin_siz result = write_rite_binary_header(mrb, *bin_size, *bin); error_exit: - if(result != MRB_DUMP_OK) { + if (result != MRB_DUMP_OK) { mrb_free(mrb, *bin); *bin = NULL; } |
