This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
(perl #129130) make chdir allocate the stack it needs
authorTony Cook <tony@develop-help.com>
Mon, 5 Sep 2016 05:40:11 +0000 (15:40 +1000)
committerTony Cook <tony@develop-help.com>
Mon, 24 Oct 2016 00:11:39 +0000 (11:11 +1100)
chdir with no argument didn't ensure there was stack space available
for its result.

pp_sys.c
t/op/chdir.t

index 13f2913..10d6185 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -3635,6 +3635,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
index 9967707..38cbbe9 100644 (file)
@@ -12,7 +12,7 @@ BEGIN {
     set_up_inc(qw(t . lib ../lib));
 }
 
-plan(tests => 47);
+plan(tests => 48);
 
 use Config;
 use Errno qw(ENOENT EBADF EINVAL);
@@ -162,6 +162,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) {