ryo-pinus
null+****@clear*****
Sun Aug 27 14:40:45 JST 2017
ryo-pinus 2017-08-27 14:40:45 +0900 (Sun, 27 Aug 2017) New Revision: 26f0518999b40c7f51b43c5139a84cb756cea1e9 https://github.com/groonga/groonga/commit/26f0518999b40c7f51b43c5139a84cb756cea1e9 Merged 5694e94: Merge pull request #758 from ryo-pinus/fix-crash-when-ruby_eval-returned-syntax-error Message: ruby_eval:Fixed crash when ruby_eval returned syntax error. fix #751 Added files: test/command/suite/ruby/eval/syntaxerror/unexpected_dot.expected test/command/suite/ruby/eval/syntaxerror/unexpected_dot.test test/command/suite/ruby/eval/syntaxerror/unexpected_end.expected test/command/suite/ruby/eval/syntaxerror/unexpected_end.test test/command/suite/ruby/eval/syntaxerror/unexpected_equal.expected test/command/suite/ruby/eval/syntaxerror/unexpected_equal.test Modified files: lib/mrb/mrb_eval_context.c Modified: lib/mrb/mrb_eval_context.c (+27 -2) =================================================================== --- lib/mrb/mrb_eval_context.c 2017-08-26 10:15:29 +0900 (d437a9932) +++ lib/mrb/mrb_eval_context.c 2017-08-27 14:40:45 +0900 (b4cbab622) @@ -33,11 +33,36 @@ eval_context_compile(mrb_state *mrb, mrb_value self) { char *script; mrb_int script_length; + mrbc_context* ctx; struct mrb_parser_state *parser; struct RProc *proc; + ctx = mrbc_context_new(mrb); + if (!ctx) + { + mrb_raise(mrb,E_RUNTIME_ERROR, "mrbc_context_new failed."); + } + ctx->capture_errors = 1; + mrb_get_args(mrb, "s", &script, &script_length); - parser = mrb_parse_nstring(mrb, script, script_length, NULL); + parser = mrb_parse_nstring(mrb, script, script_length, ctx); + if (!parser) + { + mrbc_context_free(mrb, ctx); + mrb_raise(mrb,E_RUNTIME_ERROR, "mrb_parse_nstring failed."); + } + if (parser->nerr > 0) + { + mrb_value errormessage = mrb_format(mrb, "line %S:%S: %S", + mrb_fixnum_value(parser->error_buffer[0].lineno), + mrb_fixnum_value(parser->error_buffer[0].column), + mrb_str_new_cstr(mrb, parser->error_buffer[0].message)); + mrb_parser_free(parser); + mrbc_context_free(mrb, ctx); + + mrb_raisef(mrb, E_ARGUMENT_ERROR, "%S", errormessage); + } + proc = mrb_generate_code(mrb, parser); { mrb_code *iseq = proc->body.irep->iseq; @@ -47,7 +72,7 @@ eval_context_compile(mrb_state *mrb, mrb_value self) *iseq = MKOP_AB(OP_RETURN, 1, OP_R_NORMAL); } mrb_parser_free(parser); - + mrbc_context_free(mrb, ctx); return mrb_obj_value(proc); } Added: test/command/suite/ruby/eval/syntaxerror/unexpected_dot.expected (+15 -0) 100644 =================================================================== --- /dev/null +++ test/command/suite/ruby/eval/syntaxerror/unexpected_dot.expected 2017-08-27 14:40:45 +0900 (31a6bb150) @@ -0,0 +1,15 @@ +plugin_register ruby/eval +[[0,0.0,0.0],true] +ruby_eval "." +[ + [ + 0, + 0.0, + 0.0 + ], + { + "exception": { + "message": "line 1:1: syntax error, unexpected '.'" + } + } +] Added: test/command/suite/ruby/eval/syntaxerror/unexpected_dot.test (+5 -0) 100644 =================================================================== --- /dev/null +++ test/command/suite/ruby/eval/syntaxerror/unexpected_dot.test 2017-08-27 14:40:45 +0900 (6c17e15ad) @@ -0,0 +1,5 @@ +#@on-error omit +plugin_register ruby/eval +#@on-error default + +ruby_eval "." Added: test/command/suite/ruby/eval/syntaxerror/unexpected_end.expected (+15 -0) 100644 =================================================================== --- /dev/null +++ test/command/suite/ruby/eval/syntaxerror/unexpected_end.expected 2017-08-27 14:40:45 +0900 (d87025abd) @@ -0,0 +1,15 @@ +plugin_register ruby/eval +[[0,0.0,0.0],true] +ruby_eval "begin" +[ + [ + 0, + 0.0, + 0.0 + ], + { + "exception": { + "message": "line 1:5: syntax error, unexpected $end" + } + } +] Added: test/command/suite/ruby/eval/syntaxerror/unexpected_end.test (+5 -0) 100644 =================================================================== --- /dev/null +++ test/command/suite/ruby/eval/syntaxerror/unexpected_end.test 2017-08-27 14:40:45 +0900 (ac78b17a8) @@ -0,0 +1,5 @@ +#@on-error omit +plugin_register ruby/eval +#@on-error default + +ruby_eval "begin" Added: test/command/suite/ruby/eval/syntaxerror/unexpected_equal.expected (+15 -0) 100644 =================================================================== --- /dev/null +++ test/command/suite/ruby/eval/syntaxerror/unexpected_equal.expected 2017-08-27 14:40:45 +0900 (b6874648c) @@ -0,0 +1,15 @@ +plugin_register ruby/eval +[[0,0.0,0.0],true] +ruby_eval "=" +[ + [ + 0, + 0.0, + 0.0 + ], + { + "exception": { + "message": "line 1:1: syntax error, unexpected '='" + } + } +] Added: test/command/suite/ruby/eval/syntaxerror/unexpected_equal.test (+5 -0) 100644 =================================================================== --- /dev/null +++ test/command/suite/ruby/eval/syntaxerror/unexpected_equal.test 2017-08-27 14:40:45 +0900 (8453e3b75) @@ -0,0 +1,5 @@ +#@on-error omit +plugin_register ruby/eval +#@on-error default + +ruby_eval "=" -------------- next part -------------- HTML����������������������������...Download