From 337076f9ba9222bb29f49fb5b168d8865a8a95a2 Mon Sep 17 00:00:00 2001 From: h2so5 Date: Tue, 9 Apr 2013 16:19:27 +0900 Subject: Add validation for C language symbol name --- src/dump.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'src/dump.c') diff --git a/src/dump.c b/src/dump.c index 9579dabd4..1d59e667b 100644 --- a/src/dump.c +++ b/src/dump.c @@ -499,6 +499,22 @@ mrb_dump_irep_binary(mrb_state *mrb, size_t start_index, int debug_info, FILE* f return result; } +static int +is_valid_c_symbol_name(const char *name) +{ + const char *c = NULL; + + if (name == NULL || name[0] == '\0') return 0; + if (!ISALPHA(name[0]) && name[0] != '_') return 0; + + c = &name[1]; + for (; *c != '\0'; ++c) { + if (!ISALNUM(*c) && *c != '_') return 0; + } + + return 1; +} + int mrb_dump_irep_cfunc(mrb_state *mrb, size_t start_index, int debug_info, FILE *fp, const char *initname) { @@ -506,7 +522,7 @@ mrb_dump_irep_cfunc(mrb_state *mrb, size_t start_index, int debug_info, FILE *fp size_t bin_size = 0, bin_idx = 0; int result; - if (fp == NULL || initname == NULL) { + if (fp == NULL || initname == NULL || !is_valid_c_symbol_name(initname)) { return MRB_DUMP_INVALID_ARGUMENT; } -- cgit v1.2.3