summaryrefslogtreecommitdiff
path: root/perl.c
diff options
context:
space:
mode:
authorDan Collins <dcollinsn@gmail.com>2016-09-23 01:21:20 -0400
committerTony Cook <tony@develop-help.com>2016-10-11 11:41:15 +1100
commitf54cfdacff1f3744ef08fc70f1f3bc6c7d862e83 (patch)
tree558deaa940fb8515c8f9bf7778a45f6ac13ddda4 /perl.c
parent91dca83e9396e920f65b4f093ac7f6e5250a2f43 (diff)
downloadperl-f54cfdacff1f3744ef08fc70f1f3bc6c7d862e83.tar.gz
[rt #129336] #!perl -i u erroneously interpreted as -u
Perl_moreswitches processes a single switch, and returns a pointer to the start of the next switch. It can return either the a pointer to the next flag itself: #!perl -n -p ^ Can point here Or, to the space before the next "arg": #!perl -n -p ^ Can point here (Where the next call to Perl_moreswitches will consume " -".) In the case of -i[extension], the pointer is by default pointing at the space after the end of the argument. The current code tries to do the former, by unconditionally advancing the pointer, and then advancing it again if it is on a '-'. But that is incorrect: #!perl -i p ^ Will point here, but that isn't a flag I could fix this by removing the unconditional s++, and having it increment by 2 if *(s+1)=='-', but this work isn't actually necessary - it's better to just leave it pointing at the space after the argument.
Diffstat (limited to 'perl.c')
-rw-r--r--perl.c5
1 files changed, 0 insertions, 5 deletions
diff --git a/perl.c b/perl.c
index 07b852332c..ba6d5affe9 100644
--- a/perl.c
+++ b/perl.c
@@ -3349,11 +3349,6 @@ Perl_moreswitches(pTHX_ const char *s)
PL_inplace = savepvn(start, s - start);
}
- if (*s) {
- ++s;
- if (*s == '-') /* Additional switches on #! line. */
- s++;
- }
return s;
case 'I': /* -I handled both here and in parse_body() */
forbid_setid('I', FALSE);