From be05b2f7a801ae1721641fd240e0d7d6fc018136 Mon Sep 17 00:00:00 2001 From: Aaron Crane Date: Sun, 19 Feb 2017 12:26:54 +0000 Subject: [PATCH] fix ck_return null-pointer deref on malformed code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ported to 5.24.1: commit e5c165a0b7551ffb94661aa7f18aabadba257782 Author: Aaron Crane Date: Sun Feb 19 12:26:54 2017 +0000 [perl #130815] fix ck_return null-pointer deref on malformed code commit 9de2a80ffc0eefb4d60e13766baf4bad129e0a92 Author: David Mitchell Date: Sun Feb 19 12:36:58 2017 +0000 bump test count in t/comp/parser.t (the previous commit forgot to) Signed-off-by: Petr Písař --- op.c | 2 +- t/comp/parser.t | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/op.c b/op.c index 018d90c..9a61ea7 100644 --- a/op.c +++ b/op.c @@ -10695,7 +10695,7 @@ Perl_ck_return(pTHX_ OP *o) PERL_ARGS_ASSERT_CK_RETURN; kid = OpSIBLING(cLISTOPo->op_first); - if (CvLVALUE(PL_compcv)) { + if (PL_compcv && CvLVALUE(PL_compcv)) { for (; kid; kid = OpSIBLING(kid)) op_lvalue(kid, OP_LEAVESUBLV); } diff --git a/t/comp/parser.t b/t/comp/parser.t index 50f601c..5016509 100644 --- a/t/comp/parser.t +++ b/t/comp/parser.t @@ -8,7 +8,7 @@ BEGIN { chdir 't' if -d 't'; } -print "1..173\n"; +print "1..174\n"; sub failed { my ($got, $expected, $name) = @_; @@ -546,6 +546,12 @@ eval "grep+grep"; eval 'qq{@{0]}${}},{})'; is(1, 1, "RT #124207"); +# RT #130815: crash in ck_return for malformed code +{ + eval 'm(@{if(0){sub d{]]])}return'; + like $@, qr/^syntax error at \(eval \d+\) line 1, near "\{\]"/, + 'RT #130815: null pointer deref'; +} # Add new tests HERE (above this line) -- 2.7.4