From 190fc7609152f336b21d4d3f6baeb91a4bbcfa94 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Wed, 26 Sep 2012 08:15:09 +0900 Subject: should not call mrb_parser_free() on NULL pointer --- src/parse.y | 1 - 1 file changed, 1 deletion(-) (limited to 'src') diff --git a/src/parse.y b/src/parse.y index a7f645456..2df234416 100644 --- a/src/parse.y +++ b/src/parse.y @@ -4850,7 +4850,6 @@ load_exec(mrb_state *mrb, parser_state *p, mrbc_context *c) mrb_value v; if (!p) { - mrb_parser_free(p); return mrb_undef_value(); } if (!p->tree || p->nerr) { -- cgit v1.2.3 From 7171e5aa18a411f78675d1aba7a4dfd00d797e11 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Thu, 27 Sep 2012 11:28:15 +0900 Subject: load_exec should return undef on syntax errors --- src/parse.y | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/parse.y b/src/parse.y index 2df234416..af12112c7 100644 --- a/src/parse.y +++ b/src/parse.y @@ -4866,7 +4866,7 @@ load_exec(mrb_state *mrb, parser_state *p, mrbc_context *c) static const char msg[] = "syntax error"; mrb->exc = (struct RObject*)mrb_object(mrb_exc_new(mrb, E_SYNTAX_ERROR, msg, sizeof(msg) - 1)); mrb_parser_free(p); - return mrb_nil_value(); + return mrb_undef_value(); } } n = mrb_generate_code(mrb, p); -- cgit v1.2.3 From 5adbbe66d86de3959d2e8cb114c8be255459bb0a Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Thu, 27 Sep 2012 17:17:14 +0900 Subject: should adjust array size --- src/array.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/array.c b/src/array.c index e55b104da..36f4af9c6 100644 --- a/src/array.c +++ b/src/array.c @@ -587,8 +587,7 @@ mrb_value mrb_ary_splice(mrb_state *mrb, mrb_value ary, mrb_int head, mrb_int len, mrb_value rpl) { struct RArray *a = mrb_ary_ptr(ary); - mrb_int tail; - int size; + int tail, size; mrb_value *argv; int i, argc; @@ -600,6 +599,9 @@ mrb_ary_splice(mrb_state *mrb, mrb_value ary, mrb_int head, mrb_int len, mrb_val mrb_raise(mrb, E_INDEX_ERROR, "index is out of array"); } } + if (a->len < len || a->len < head + len) { + len = a->len - head; + } tail = head + len; /* size check */ @@ -614,7 +616,6 @@ mrb_ary_splice(mrb_state *mrb, mrb_value ary, mrb_int head, mrb_int len, mrb_val size = head + argc; if (tail < a->len) size += a->len - tail; - if (size > a->aux.capa) ary_expand_capa(mrb, a, size); -- cgit v1.2.3