summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2018-11-15 23:26:37 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2018-11-15 23:34:32 +0900
commit7e3e8d8ed5d9d12e7d3b0d616bf9b770f07e0d4f (patch)
tree6f6c0f3c32337424949ee291035a153ab9c194af
parentfaf51f82c7265f2cbdda8291429d7f2016d2bc3f (diff)
downloadmruby-7e3e8d8ed5d9d12e7d3b0d616bf9b770f07e0d4f.tar.gz
mruby-7e3e8d8ed5d9d12e7d3b0d616bf9b770f07e0d4f.zip
Shrink file name table size to `uint16_t`; ref #4138
-rw-r--r--include/mruby/compile.h4
-rw-r--r--mrbgems/mruby-compiler/core/parse.y8
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);
}