diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-06-03 09:41:32 -0700 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-06-03 09:41:32 -0700 |
| commit | d8f1e17ef6282b15c945f1feb5b75c36be96f20e (patch) | |
| tree | e036ad5bf1629f748af8f3084ca8a15cccd07e19 | |
| parent | 0719f523048ecd6da1d28e4b2eba7794e419dd36 (diff) | |
| parent | 2fff59dc8674ad6689acc5080463eede4c5bb2ab (diff) | |
| download | mruby-d8f1e17ef6282b15c945f1feb5b75c36be96f20e.tar.gz mruby-d8f1e17ef6282b15c945f1feb5b75c36be96f20e.zip | |
Merge pull request #239 from thecodeshop/jf/mrb_open
guard mrb_open mem allocation and downstream usage
| -rw-r--r-- | src/codegen.c | 5 | ||||
| -rw-r--r-- | src/gc.c | 40 | ||||
| -rw-r--r-- | src/parse.y | 5 | ||||
| -rw-r--r-- | src/state.c | 1 | ||||
| -rw-r--r-- | test/driver.c | 5 | ||||
| -rw-r--r-- | tools/mirb/mirb.c | 5 | ||||
| -rw-r--r-- | tools/mrbc/mrbc.c | 5 | ||||
| -rw-r--r-- | tools/mruby/mruby.c | 5 |
8 files changed, 71 insertions, 0 deletions
diff --git a/src/codegen.c b/src/codegen.c index 117588b6e..027b6777f 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -2292,6 +2292,11 @@ main() mrb_state *mrb = mrb_open(); int n; + if (mrb == NULL) { + fprintf(stderr, "Invalid mrb_state, exiting codegen test"); + return EXIT_FAILURE; + } + #if 1 n = mrb_compile_string(mrb, "p(__FILE__)\np(__LINE__)"); #else @@ -934,6 +934,11 @@ test_mrb_field_write_barrier(void) mrb_state *mrb = mrb_open(); struct RBasic *obj, *value; + if (mrb == NULL) { + fprintf(stderr, "Invalid mrb_state, exiting test_mrb_field_write_barrier"); + return; + } + puts("test_mrb_field_write_barrier"); obj = RBASIC(mrb_ary_new(mrb)); value = RBASIC(mrb_str_new_cstr(mrb, "value")); @@ -997,6 +1002,11 @@ test_mrb_write_barrier(void) mrb_state *mrb = mrb_open(); struct RBasic *obj; + if (mrb == NULL) { + fprintf(stderr, "Invalid mrb_state, exiting test_mrb_write_barrier"); + return; + } + puts("test_mrb_write_barrier"); obj = RBASIC(mrb_ary_new(mrb)); paint_black(obj); @@ -1024,6 +1034,11 @@ test_add_gray_list(void) mrb_state *mrb = mrb_open(); struct RBasic *obj1, *obj2; + if (mrb == NULL) { + fprintf(stderr, "Invalid mrb_state, exiting test_add_gray_list"); + return; + } + puts("test_add_gray_list"); gc_assert(mrb->gray_list == NULL); obj1 = RBASIC(mrb_str_new_cstr(mrb, "test")); @@ -1048,6 +1063,11 @@ test_gc_gray_mark(void) struct RBasic *obj; size_t gray_num = 0; + if (mrb == NULL) { + fprintf(stderr, "Invalid mrb_state, exiting test_gc_gray_mark"); + return; + } + puts("test_gc_gray_mark"); puts(" in MRB_TT_CLASS"); @@ -1079,6 +1099,11 @@ test_incremental_gc(void) RVALUE *free; struct heap_page *page; + if (mrb == NULL) { + fprintf(stderr, "Invalid mrb_state, exiting test_incremental_gc"); + return; + } + puts("test_incremental_gc"); mrb_garbage_collect(mrb); @@ -1135,6 +1160,11 @@ test_incremental_sweep_phase(void) { mrb_state *mrb = mrb_open(); + if (mrb == NULL) { + fprintf(stderr, "Invalid mrb_state, exiting test_incremental_sweep_phase"); + return; + } + puts("test_incremental_sweep_phase"); add_heap(mrb); @@ -1158,6 +1188,11 @@ test_gc_api(void) mrb_value argv[1]; + if (mrb == NULL) { + fprintf(stderr, "Invalid mrb_state, exiting test_gc_api"); + return; + } + puts("test_gc_api"); gc_start(mrb, mrb_nil_value()); @@ -1191,6 +1226,11 @@ test_many_object_benchmark(void) mrb_value ary = mrb_ary_new(mrb); int save_point = mrb_gc_arena_save(mrb); + if (mrb == NULL) { + fprintf(stderr, "Invalid mrb_state, test_many_object_benchmark"); + return; + } + puts("test_many_object_benchmark"); for (i=0; i<1000; i++) { diff --git a/src/parse.y b/src/parse.y index eae9fb373..884290961 100644 --- a/src/parse.y +++ b/src/parse.y @@ -5518,6 +5518,11 @@ main() mrb_state *mrb = mrb_open(); int n; + if (mrb == NULL) { + fprintf(stderr, "Invalid mrb_state, exiting parser test"); + return EXIT_FAILURE; + } + n = mrb_compile_string(mrb, "\ def fib(n)\n\ if n<2\n\ diff --git a/src/state.c b/src/state.c index 727bd8ecb..e4729ca70 100644 --- a/src/state.c +++ b/src/state.c @@ -16,6 +16,7 @@ mrb_state* mrb_open_allocf(mrb_allocf f) { mrb_state *mrb = (f)(NULL, NULL, sizeof(mrb_state)); + if (mrb == NULL) return NULL; memset(mrb, 0, sizeof(mrb_state)); mrb->allocf = f; diff --git a/test/driver.c b/test/driver.c index 4651d75fc..6b42d025b 100644 --- a/test/driver.c +++ b/test/driver.c @@ -36,6 +36,11 @@ main(void) /* new interpreter instance */ mrb = mrb_open(); + if (mrb == NULL) { + fprintf(stderr, "Invalid mrb_state, exiting test driver"); + return EXIT_FAILURE; + } + mrb_init_mrbtest(mrb); parser = mrb_parse_nstring(mrb, prog, strlen(prog)); diff --git a/tools/mirb/mirb.c b/tools/mirb/mirb.c index 59e5046cb..35558acfb 100644 --- a/tools/mirb/mirb.c +++ b/tools/mirb/mirb.c @@ -142,6 +142,11 @@ main(void) /* new interpreter instance */ mrb_interpreter = mrb_open(); + if (mrb_interpreter == NULL) { + fprintf(stderr, "Invalid mrb_interpreter, exiting mirb"); + return EXIT_FAILURE; + } + /* new parser instance */ parser = mrb_parser_new(mrb_interpreter); memset(ruby_code, 0, sizeof(*ruby_code)); diff --git a/tools/mrbc/mrbc.c b/tools/mrbc/mrbc.c index 3553fe646..99fea76d8 100644 --- a/tools/mrbc/mrbc.c +++ b/tools/mrbc/mrbc.c @@ -158,6 +158,11 @@ main(int argc, char **argv) struct _args args; struct mrb_parser_state *p; + if (mrb == NULL) { + fprintf(stderr, "Invalid mrb_state, exiting mrbc"); + return EXIT_FAILURE; + } + n = parse_args(mrb, argc, argv, &args); if (n < 0 || args.rfp == NULL) { diff --git a/tools/mruby/mruby.c b/tools/mruby/mruby.c index 8b227df5d..0e38879db 100644 --- a/tools/mruby/mruby.c +++ b/tools/mruby/mruby.c @@ -142,6 +142,11 @@ main(int argc, char **argv) struct _args args; struct mrb_parser_state *p; + if (mrb == NULL) { + fprintf(stderr, "Invalid mrb_state, exiting mruby"); + return EXIT_FAILURE; + } + n = parse_args(mrb, argc, argv, &args); if (n < 0 || (args.cmdline == NULL && args.rfp == NULL)) { cleanup(mrb, &args); |
