summaryrefslogtreecommitdiff
path: root/doio.c
diff options
context:
space:
mode:
authorLarry Wall <lwall@jpl-devvax.jpl.nasa.gov>1990-03-13 23:33:04 +0000
committerLarry Wall <lwall@jpl-devvax.jpl.nasa.gov>1990-03-13 23:33:04 +0000
commit63f2c1e106a2635d888c6b582f4c59b5c0ecc7ee (patch)
tree8f937b14482c666265f81797ebd4f122c8260cfb /doio.c
parent79a0689e17f959bdb246dc37bbbbfeba4c2b3b56 (diff)
downloadperl-63f2c1e106a2635d888c6b582f4c59b5c0ecc7ee.tar.gz
perl 3.0 patch #15 (combined patch)
In patch 13, there was a fix to make the VAR=value construct in a command force interpretation by the shell. This was botched, causing an argv list to be occasionally allocated with too small a size. This problem is hidden on some machines because of BSD malloc's semantics. The lib/dumpvar.pl file was missing final 1; which made it difficult to tell if it loaded right. The lib/termcap.pl Tgetent subroutine didn't interpret ^x right due to a missing ord(). In the section of the man page that gives hints for C programmers, it falsely declared that you can't subscript array values. As of patch 13, this statement is "inoperative". The t/op.sleep test assumed that a sleep of 2 seconds would always return a value of 2 seconds slept. Depending on the load and the whimsey of the scheduler, it could actually sleep longer than 2 seconds upon occasion. It now allows sleeps of up to 10 seconds.
Diffstat (limited to 'doio.c')
-rw-r--r--doio.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/doio.c b/doio.c
index ea9a71f347..e19a6f2591 100644
--- a/doio.c
+++ b/doio.c
@@ -1,4 +1,4 @@
-/* $Header: doio.c,v 3.0.1.6 90/03/12 16:30:07 lwall Locked $
+/* $Header: doio.c,v 3.0.1.7 90/03/14 12:26:24 lwall Locked $
*
* Copyright (c) 1989, Larry Wall
*
@@ -6,6 +6,9 @@
* as specified in the README file that comes with the perl 3.0 kit.
*
* $Log: doio.c,v $
+ * Revision 3.0.1.7 90/03/14 12:26:24 lwall
+ * patch15: commands involving execs could cause malloc arena corruption
+ *
* Revision 3.0.1.6 90/03/12 16:30:07 lwall
* patch13: system 'FOO=bar command' didn't invoke sh as it should
*
@@ -931,6 +934,9 @@ char *cmd;
/* see if there are shell metacharacters in it */
+ for (s = cmd; *s && isalpha(*s); s++) ; /* catch VAR=val gizmo */
+ if (*s == '=')
+ goto doshell;
for (s = cmd; *s; s++) {
if (*s != ' ' && !isalpha(*s) && index("$&*(){}[]'\";\\|?<>~`\n",*s)) {
if (*s == '\n' && !s[1]) {
@@ -942,9 +948,6 @@ char *cmd;
return FALSE;
}
}
- for (s = cmd; *s && isalpha(*s); s++) ; /* catch VAR=val gizmo */
- if (*s == '=')
- goto doshell;
New(402,argv, (s - cmd) / 2 + 2, char*);
a = argv;