From d47812b974b515e952dc093e692bf15f0a9afbc4 Mon Sep 17 00:00:00 2001 From: Tony Cook Date: Mon, 5 Sep 2016 15:40:11 +1000 Subject: [PATCH] (perl #129130) make chdir allocate the stack it needs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ported to 5.24.0: commit 92c843fb4b4e1a1e0ac7ec0fe198dc77266838da Author: Tony Cook Date: Mon Sep 5 15:40:11 2016 +1000 (perl #129130) make chdir allocate the stack it needs chdir with no argument didn't ensure there was stack space available for its result. Signed-off-by: Petr Písař --- pp_sys.c | 1 + t/op/chdir.t | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/pp_sys.c b/pp_sys.c index 3bf2673..d2cf872 100644 --- a/pp_sys.c +++ b/pp_sys.c @@ -3639,6 +3639,7 @@ PP(pp_chdir) HV * const table = GvHVn(PL_envgv); SV **svp; + EXTEND(SP, 1); if ( (svp = hv_fetchs(table, "HOME", FALSE)) || (svp = hv_fetchs(table, "LOGDIR", FALSE)) #ifdef VMS diff --git a/t/op/chdir.t b/t/op/chdir.t index a5ea76a..685e556 100644 --- a/t/op/chdir.t +++ b/t/op/chdir.t @@ -10,7 +10,7 @@ BEGIN { # possibilities into @INC. unshift @INC, qw(t . lib ../lib); require "test.pl"; - plan(tests => 47); + plan(tests => 48); } use Config; @@ -161,6 +161,12 @@ sub check_env { } } +fresh_perl_is(<<'EOP', '', { stderr => 1 }, "check stack handling"); +for $x (map $_+1, 1 .. 100) { + map chdir, 1 .. $x; +} +EOP + my %Saved_Env = (); sub clean_env { foreach my $env (@magic_envs) { -- 2.7.4