New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
repeated pipe open broken #1007
Comments
From @andkThis bug was introduced between 5.5.57 and 5.5.58 % ./perl5.005_57/perl -e 'print $], "\n"; Perl Info
|
From @gsarOn Thu, 30 Dec 1999 19:07:33 +0100, "Andreas J. Koenig" wrote:
This appears to be due to: [ 3786] By: gsar on 1999/07/27 06:30:09 Here's one clue: % perl -le '$_ = "echo x|"; open P, $_ or die; print' Sarathy |
From @gsarOn Thu, 30 Dec 1999 13:15:14 PST, I wrote:
This patch is meant to fix that. Sarathy Inline Patch-----------------------------------8<-----------------------------------
Change 4757 by gsar@auger on 2000/01/05 12:48:10
severe bugs in change#3786 fixed
Affected files ...
... //depot/perl/doio.c#90 edit
... //depot/perl/t/io/open.t#12 edit
Differences ...
==== //depot/perl/doio.c#90 (text) ====
Index: perl/doio.c
--- perl/doio.c.~1~ Wed Jan 5 04:48:15 2000
+++ perl/doio.c Wed Jan 5 04:48:15 2000
@@ -183,28 +183,29 @@
}
}
else {
- char *myname;
- char *type = name;
- char *otype = name;
+ char *type;
+ char *oname = name;
STRLEN tlen;
- STRLEN otlen = len;
+ STRLEN olen = len;
char mode[3]; /* stdio file mode ("r\0" or "r+\0") */
int dodup;
+ type = savepvn(name, len);
+ tlen = len;
+ SAVEFREEPV(type);
if (num_svs) {
- type = name;
- name = SvPV(svs, tlen) ;
- len = (I32)tlen;
+ STRLEN l;
+ name = SvPV(svs, l) ;
+ len = (I32)l;
+ name = savepvn(name, len);
+ SAVEFREEPV(name);
}
-
- tlen = otlen;
- myname = savepvn(name, len);
- SAVEFREEPV(myname);
- name = myname;
- if (!num_svs)
+ else {
while (tlen && isSPACE(type[tlen-1]))
type[--tlen] = '\0';
-
+ name = type;
+ len = tlen;
+ }
mode[0] = mode[1] = mode[2] = '\0';
IoTYPE(io) = *type;
if (*type == '+' && tlen > 1 && type[tlen-1] != '|') { /* scary */
@@ -216,12 +217,14 @@
if (*type == '|') {
if (num_svs && (tlen != 2 || type[1] != '-')) {
unknown_desr:
- Perl_croak(aTHX_ "Unknown open() mode '%.*s'", otlen, otype);
+ Perl_croak(aTHX_ "Unknown open() mode '%.*s'", olen, oname);
}
/*SUPPRESS 530*/
- for (type++; isSPACE(*type); type++) ;
- if (!num_svs)
+ for (type++, tlen--; isSPACE(*type); type++, tlen--) ;
+ if (!num_svs) {
name = type;
+ len = tlen;
+ }
if (*name == '\0') { /* command is missing 19990114 */
dTHR;
if (ckWARN(WARN_PIPE))
@@ -232,9 +235,9 @@
if (strNE(name,"-") || num_svs)
TAINT_ENV();
TAINT_PROPER("piped open");
- if (name[strlen(name)-1] == '|') {
+ if (name[len-1] == '|') {
dTHR;
- name[strlen(name)-1] = '\0' ;
+ name[--len] = '\0' ;
if (ckWARN(WARN_PIPE))
Perl_warner(aTHX_ WARN_PIPE, "Can't open bidirectional pipe");
}
@@ -308,7 +311,7 @@
if (!(fp = PerlIO_fdopen(fd,mode))) {
if (dodup)
PerlLIO_close(fd);
- }
+ }
}
}
else {
==== //depot/perl/t/io/open.t#12 (xtext) ====
Index: perl/t/io/open.t
--- perl/t/io/open.t.~1~ Wed Jan 5 04:48:15 2000
+++ perl/t/io/open.t Wed Jan 5 04:48:15 2000
@@ -5,7 +5,7 @@
$^W = 1;
$Is_VMS = $^O eq 'VMS';
-print "1..64\n";
+print "1..66\n";
my $test = 1;
@@ -258,3 +258,12 @@
ok;
$@ =~ /Unknown open\(\) mode \'<&\'/ or print "not ";
ok;
+
+# 65..66
+{
+ local *F;
+ for (1..2) { open(F, "echo #foo|") or print "not "; }
+ ok;
+ for (1..2) { open(F, "-|", "echo #foo") or print "not "; }
+ ok;
+}
End of Patch. |
From [Unknown Contact. See original ticket]Gurusamy Sarathy writes:
Thanks. Exactly when I sat down to run it through debugger! Good Ilya |
Migrated from rt.perl.org#1957 (status was 'resolved')
Searchable as RT1957$
The text was updated successfully, but these errors were encountered: