diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-01-27 12:15:58 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-01-27 12:15:58 +0900 |
| commit | 5e479c66d56f5938f330e7e71313dc95747b3bb1 (patch) | |
| tree | a12cdf1113daa3f58aaeff5e8a478745c1534cbb | |
| parent | 89cd742506019d2a1987b8fdd5c8fee792d1d5c2 (diff) | |
| parent | 504788bf89242c0be0c6027d59da5f5ec89b0d24 (diff) | |
| download | mruby-5e479c66d56f5938f330e7e71313dc95747b3bb1.tar.gz mruby-5e479c66d56f5938f330e7e71313dc95747b3bb1.zip | |
Merge pull request #5300 from shuujii/avoid-possible-loss-of-data-casting-in-binary-search
Avoid 'possible loss of data' casting in binary search
| -rw-r--r-- | src/dump.c | 6 | ||||
| -rw-r--r-- | src/symbol.c | 4 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/dump.c b/src/dump.c index 216701ba8..5173b88e5 100644 --- a/src/dump.c +++ b/src/dump.c @@ -1036,14 +1036,16 @@ sym_name_cvar_p(const char *name, mrb_int len) static const char* sym_operator_name(const char *sym_name, mrb_int len) { - mrb_sym start, idx; mrb_sym table_size = sizeof(operator_table)/sizeof(struct operator_symbol); + if (operator_table[table_size-1].sym_name_len < len) return NULL; + + mrb_sym start, idx; int cmp; const struct operator_symbol *op_sym; for (start = 0; table_size != 0; table_size/=2) { idx = start+table_size/2; op_sym = &operator_table[idx]; - cmp = (int)(len-op_sym->sym_name_len); + cmp = (int)len-(int)op_sym->sym_name_len; if (cmp == 0) { cmp = memcmp(sym_name, op_sym->sym_name, len); if (cmp == 0) return op_sym->name; diff --git a/src/symbol.c b/src/symbol.c index 0ea99533e..1d2c7c776 100644 --- a/src/symbol.c +++ b/src/symbol.c @@ -31,11 +31,13 @@ static const struct { static mrb_sym presym_find(const char *name, size_t len) { + if (presym_table[MRB_PRESYM_MAX-1].len < len) return 0; + mrb_sym start, idx, presym_size = MRB_PRESYM_MAX; int cmp; for (start = 0; presym_size != 0; presym_size/=2) { idx = start+presym_size/2; - cmp = (int)(len-presym_table[idx].len); + cmp = (int)len-(int)presym_table[idx].len; if (cmp == 0) { cmp = memcmp(name, presym_table[idx].name, len); if (cmp == 0) return idx+1; |
