diff options
| -rw-r--r-- | src/load.c | 14 | ||||
| -rw-r--r-- | src/parse.y | 1 |
2 files changed, 7 insertions, 8 deletions
diff --git a/src/load.c b/src/load.c index 889420ae9..9854f712f 100644 --- a/src/load.c +++ b/src/load.c @@ -670,23 +670,21 @@ mrb_read_irep_file(mrb_state *mrb, FILE* fp) /* You don't need use SIZE_ERROR as buf_size is enough small. */ buf = (uint8_t*)mrb_malloc(mrb, header_size); if (fread(buf, header_size, 1, fp) == 0) { - mrb_free(mrb, buf); - return NULL; + goto irep_exit; } result = read_binary_header(buf, &buf_size, NULL, &flags); - if (result != MRB_DUMP_OK) { - mrb_free(mrb, buf); - return NULL; + if (result != MRB_DUMP_OK || buf_size <= header_size) { + goto irep_exit; } buf = (uint8_t*)mrb_realloc(mrb, buf, buf_size); if (fread(buf+header_size, buf_size-header_size, 1, fp) == 0) { - mrb_free(mrb, buf); - return NULL; + goto irep_exit; } irep = read_irep(mrb, buf, FLAG_SRC_MALLOC); - mrb_free(mrb, buf); +irep_exit: + mrb_free(mrb, buf); return irep; } diff --git a/src/parse.y b/src/parse.y index 0571fe0f5..ca2a52861 100644 --- a/src/parse.y +++ b/src/parse.y @@ -201,6 +201,7 @@ parser_strndup(parser_state *p, const char *s, size_t len) b[len] = '\0'; return b; } +#undef strndup #define strndup(s,len) parser_strndup(p, s, len) static char* |
