summary refs log tree commit diff
path: root/gnu/packages/patches/quilt-compat-getopt-fix-option-with-nondigit-param.patch
blob: 6bbec67e75fd8482dc41abae8824fd5ec3108c8a (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
From: Jean Delvare <jdelvare@suse.de>
Subject: compat/getopt: Allow non-digit parameter embedded in short option

The compatibility getopt script allows only digit parameters to be
embedded in short options. Util-linux's getopt implementation does
not have such a restriction and allows any parameter to be embedded
in short options. As a consequence, using the compatibility getopt
script would choke for example on "-pab", which is a legal option
of the "quilt refresh" command.

Remove the limitation on digits so that the compatibility getopt
script allows what util-linux allows. This fixes the second half
of bug #54772:
https://savannah.nongnu.org/bugs/index.php?54772

As a side note, this feature of the compatibility script was broken
anyway, as it would output the digits in reverse order.

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

--- quilt.orig/compat/getopt.in	2018-10-03 16:05:56.818667040 +0200
+++ quilt/compat/getopt.in	2018-10-03 16:12:17.624841732 +0200
@@ -108,15 +108,10 @@ foreach my $word (@words) {
 				if (scalar(@letters) == 0) {
 					$need_param = $letter;
 				} else {
-					# short options can have numerical args
-					# embedded in the short option list: -UO
-					die "unexpected character after option $letter"
-						if ($letters[$#letters] !~ /[0-9]/);
-					my @digits;
-					while (scalar(@letters) && ($letters[$#letters] =~ /[0-9]/)) {
-						push @digits, pop @letters;
-					}
-					push @options, quote_word(join('', reverse @digits));
+					# short options can have args
+					# embedded in the short option list
+					push @options, quote_word(join('', reverse @letters));
+					@letters = ();
 				}
 			}
 		}