Blob Blame History Raw
From 36dc786e5ea4a6d3e85f1f55251b8538fabb8321 Mon Sep 17 00:00:00 2001
From: Tony Cook <tony@develop-help.com>
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.22.2:

commit 92c843fb4b4e1a1e0ac7ec0fe198dc77266838da
Author: Tony Cook <tony@develop-help.com>
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ř <ppisar@redhat.com>
---
 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 1285c75..2171a1a 100644
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -3580,6 +3580,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 813b0ed..f16be41 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 => 48);
+    plan(tests => 49);
 }
 
 use Config;
@@ -176,6 +176,12 @@ WARNING
     }
 }
 
+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