From 504788bf89242c0be0c6027d59da5f5ec89b0d24 Mon Sep 17 00:00:00 2001 From: KOBAYASHI Shuji Date: Wed, 27 Jan 2021 11:42:18 +0900 Subject: Avoid 'possible loss of data' casting in binary search Because it may not be expected result. example: https://wandbox.org/permlink/F5Mp7IEJ1VY3CFLp --- src/dump.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/dump.c') 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; -- cgit v1.2.3