The MSDOS-only call to moreswitches will never reach forbid_setid, so
Nicholas Clark [Fri, 3 Feb 2006 22:18:45 +0000 (22:18 +0000)]
it can have a parameter of -1 without changing any behaviour.
I see no reason to forbid "command line" switches when they are
actually coming from the #! line of the script itself (as read by perl)
as they must have been written by the owner of the script, rather than
being crafted by the user manipulating the command line, and therefore
cannot be subverted. (Or alternatively, can be subverted as easily as
the rest of the script, and we're permitting *that* to be run)

p4raw-id: //depot/perl@27074

perl.c

diff --git a/perl.c b/perl.c
index 51ad36d..09e49c6 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -2009,7 +2009,7 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
     else if (scriptname == NULL) {
 #ifdef MSDOS
        if ( PerlLIO_isatty(PerlIO_fileno(PerlIO_stdin())) )
-           moreswitches("h", suidscript);
+           moreswitches("h", -1);
 #endif
        scriptname = "-";
     }
@@ -4265,7 +4265,7 @@ S_find_beginning(pTHX_ const int suidscript)
                while (isDIGIT(s2[-1]) || s2[-1] == '-' || s2[-1] == '.'
                       || s2[-1] == '_') s2--;
                if (strnEQ(s2-4,"perl",4))
-                   while ((s = moreswitches(s, suidscript)))
+                   while ((s = moreswitches(s, -1)))
                        ;
            }
 #ifdef MACOS_TRADITIONAL