mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
iseq.c: avoid segfault on incomplete iseq
Compile failures will trigger iseq_free before iseq->callinfo_entries are allocated at all. * iseq.c (iseq_free): avoid segfault on incomplete iseq * test/ruby/test_syntax.rb (test_invalid_next): new test for syntax error, not segfault git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48704 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
ddc4cd4ace
commit
0c662b3431
3 changed files with 17 additions and 5 deletions
|
@ -1,3 +1,9 @@
|
|||
Thu Dec 4 06:56:57 2014 Eric Wong <e@80x24.org>
|
||||
|
||||
* iseq.c (iseq_free): avoid segfault on incomplete iseq
|
||||
* test/ruby/test_syntax.rb (test_invalid_next): new test
|
||||
for syntax error, not segfault
|
||||
|
||||
Thu Dec 4 04:20:34 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* load.c (ruby_require_internal): ignore error detail, just return
|
||||
|
|
12
iseq.c
12
iseq.c
|
@ -79,12 +79,14 @@ iseq_free(void *ptr)
|
|||
RUBY_FREE_UNLESS_NULL(iseq->line_info_table);
|
||||
RUBY_FREE_UNLESS_NULL(iseq->local_table);
|
||||
RUBY_FREE_UNLESS_NULL(iseq->is_entries);
|
||||
for (i=0; i<iseq->callinfo_size; i++) {
|
||||
/* TODO: revisit callinfo data structure */
|
||||
rb_call_info_kw_arg_t *kw_arg = iseq->callinfo_entries[i].kw_arg;
|
||||
RUBY_FREE_UNLESS_NULL(kw_arg);
|
||||
if (iseq->callinfo_entries) {
|
||||
for (i=0; i<iseq->callinfo_size; i++) {
|
||||
/* TODO: revisit callinfo data structure */
|
||||
rb_call_info_kw_arg_t *kw_arg = iseq->callinfo_entries[i].kw_arg;
|
||||
RUBY_FREE_UNLESS_NULL(kw_arg);
|
||||
}
|
||||
RUBY_FREE_UNLESS_NULL(iseq->callinfo_entries);
|
||||
}
|
||||
RUBY_FREE_UNLESS_NULL(iseq->callinfo_entries);
|
||||
RUBY_FREE_UNLESS_NULL(iseq->catch_table);
|
||||
RUBY_FREE_UNLESS_NULL(iseq->param.opt_table);
|
||||
if (iseq->param.keyword != NULL) {
|
||||
|
|
|
@ -364,6 +364,10 @@ WARN
|
|||
}
|
||||
end
|
||||
|
||||
def test_invalid_next
|
||||
assert_syntax_error("def m; next; end", /Invalid next/)
|
||||
end
|
||||
|
||||
def test_lambda_with_space
|
||||
feature6390 = '[ruby-dev:45605]'
|
||||
assert_valid_syntax("-> (x, y) {}", __FILE__, feature6390)
|
||||
|
|
Loading…
Reference in a new issue