summary refs log tree commit diff
path: root/gnu/packages/patches/quilt-compat-getopt-fix-second-separator.patch
blob: cde2c8d41c7fa2222e98981cb11dd2be8ccb6d95 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
From: Jean Delvare <jdelvare@suse.de>
Subject: compat/getopt: Handle a second separator

getopt can be passed 2 '--' separators. The first one tells that
getopt options are over and target program options start. The second
one tells that the target program's options are over and following
arguments should be treated as non-options even if they look like
options.

This second separator was not handled, causing the compatibility
getopt script to treat the following arguments as options, eventually
failing one way or another.

Properly detect and handle the second separator. This fixes the first
half of bug #54772:
https://savannah.nongnu.org/bugs/index.php?54772

Signed-off-by: Jean Delvare <jdelvare@suse.de>
---
 compat/getopt.in |   13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

--- quilt.orig/compat/getopt.in	2018-10-03 15:23:21.147620172 +0200
+++ quilt/compat/getopt.in	2018-10-03 16:05:56.818667040 +0200
@@ -8,12 +8,12 @@
 
 use strict;
 
-my $opts;
+my $opts = '';
 my @words;
 my $found_sep = 0;
 
 foreach my $arg (@ARGV) {
-  if ($arg eq '--') {
+  if (!$found_sep && $arg eq '--') {
     $found_sep = 1;
   }
   else {
@@ -62,10 +62,17 @@ sub quote_word
 	return "'$word'";
 }
 
+# there can be a second separator, to inhibit processing following arguments
+# as options
+$found_sep = 0;
 foreach my $word (@words) {
+	if ($word eq '--') {
+		$found_sep = 1;
+		next;
+	}
 
 	# allow '-' to be an option value
-	if (!$need_param && $word !~ /^-./) {
+	if ($found_sep || (!$need_param && $word !~ /^-./)) {
 		push @barewords, quote_word($word);
 		next;
 	}