diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-11-15 23:26:37 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-11-15 23:34:32 +0900 |
| commit | 7e3e8d8ed5d9d12e7d3b0d616bf9b770f07e0d4f (patch) | |
| tree | 6f6c0f3c32337424949ee291035a153ab9c194af | |
| parent | faf51f82c7265f2cbdda8291429d7f2016d2bc3f (diff) | |
| download | mruby-7e3e8d8ed5d9d12e7d3b0d616bf9b770f07e0d4f.tar.gz mruby-7e3e8d8ed5d9d12e7d3b0d616bf9b770f07e0d4f.zip | |
Shrink file name table size to `uint16_t`; ref #4138
| -rw-r--r-- | include/mruby/compile.h | 4 | ||||
| -rw-r--r-- | mrbgems/mruby-compiler/core/parse.y | 8 |
2 files changed, 8 insertions, 4 deletions
diff --git a/include/mruby/compile.h b/include/mruby/compile.h index a85460415..63ec8aca1 100644 --- a/include/mruby/compile.h +++ b/include/mruby/compile.h @@ -158,8 +158,8 @@ struct mrb_parser_state { struct mrb_parser_message warn_buffer[10]; mrb_sym* filename_table; - size_t filename_table_length; - int current_filename_index; + uint16_t filename_table_length; + uint16_t current_filename_index; struct mrb_jmpbuf* jmp; }; diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index 5e6cda236..1c06be839 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -5900,7 +5900,11 @@ mrb_parser_set_filename(struct mrb_parser_state *p, const char *f) } } - p->current_filename_index = (int)p->filename_table_length++; + if (p->filename_table_length == UINT16_MAX) { + yyerror(p, "too many files to compile"); + return; + } + p->current_filename_index = p->filename_table_length++; new_table = (mrb_sym*)parser_palloc(p, sizeof(mrb_sym) * p->filename_table_length); if (p->filename_table) { @@ -5912,7 +5916,7 @@ mrb_parser_set_filename(struct mrb_parser_state *p, const char *f) MRB_API char const* mrb_parser_get_filename(struct mrb_parser_state* p, uint16_t idx) { - if (idx >= p->filename_table_length) { return NULL; } + if (idx >= p->filename_table_length) return NULL; else { return mrb_sym2name_len(p->mrb, p->filename_table[idx], NULL); } |
