Commit c5c3fa19 authored by Yukihiro "Matz" Matsumoto's avatar Yukihiro "Matz" Matsumoto

Merge pull request #1164 from h2so5/add-validation-for-c-symbol

Add validation for C language symbol name
parents 8e23410a 337076f9
...@@ -499,6 +499,22 @@ mrb_dump_irep_binary(mrb_state *mrb, size_t start_index, int debug_info, FILE* f ...@@ -499,6 +499,22 @@ mrb_dump_irep_binary(mrb_state *mrb, size_t start_index, int debug_info, FILE* f
return result; 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 int
mrb_dump_irep_cfunc(mrb_state *mrb, size_t start_index, int debug_info, FILE *fp, const char *initname) 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 ...@@ -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; size_t bin_size = 0, bin_idx = 0;
int result; int result;
if (fp == NULL || initname == NULL) { if (fp == NULL || initname == NULL || !is_valid_c_symbol_name(initname)) {
return MRB_DUMP_INVALID_ARGUMENT; return MRB_DUMP_INVALID_ARGUMENT;
} }
......
...@@ -215,6 +215,10 @@ main(int argc, char **argv) ...@@ -215,6 +215,10 @@ main(int argc, char **argv)
} }
if (args.initname) { if (args.initname) {
n = mrb_dump_irep_cfunc(mrb, n, args.debug_info, args.wfp, args.initname); n = mrb_dump_irep_cfunc(mrb, n, args.debug_info, args.wfp, args.initname);
if (n == MRB_DUMP_INVALID_ARGUMENT) {
printf("%s: Invalid C language symbol name\n", args.initname);
return EXIT_FAILURE;
}
} }
else { else {
n = mrb_dump_irep_binary(mrb, n, args.debug_info, args.wfp); n = mrb_dump_irep_binary(mrb, n, args.debug_info, args.wfp);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment