[ID 20010203.006] perlio.c is mis-reporting argument
Nicholas Clark [Sat, 3 Feb 2001 23:53:16 +0000 (23:53 +0000)]
length byfailing to spot lack of closing )
       Message-Id: <E14PCUW-0001Qo-00@Bagpuss.unfortu.net>

p4raw-id: //depot/perl@8688

perlio.c
pod/perldiag.pod

index 1c8f65d..1237497 100644 (file)
--- a/perlio.c
+++ b/perlio.c
@@ -651,6 +651,10 @@ PerlIO_apply_layers(pTHX_ PerlIO *f, const char *mode, const char *names)
              PerlIO_funcs *tab = INT2PTR(PerlIO_funcs *, SvIV(SvRV(layer)));
              if (tab)
               {
+              if (as && (ae == Nullch)) {
+               ae = e;
+               Perl_warn(aTHX_ "perlio: argument list not closed for layer \"%.*s\"",(int)(e - s),s);
+              }
                len = (as) ? (ae-(as++)-1) : 0;
                if (!PerlIO_push(f,tab,mode,as,len))
                 return -1;
index 597473f..a62d8d1 100644 (file)
@@ -2602,6 +2602,16 @@ the problem, however, you will get the same error message each time
 you run Perl.  How to really fix the problem can be found in
 L<perllocale> section B<LOCALE PROBLEMS>.
 
+=item perlio: argument list not closed for layer "%s"
+
+(S) When pusing a layer with arguments onto the Perl I/O system you forgot
+the ) that closes the argument list.  (Layers take care of transforming
+data between external and internal representations.)  Perl assumed that
+the argument list finished at the next : or the end of the layer
+specification. If your program didn't explicitly request the failing
+operation, it may be the result of the value of the environment variable
+PERLIO.
+
 =item perlio: unknown layer "%s"
 
 (S) An attempt was made to push an unknown layer onto the Perl I/O