diff options
-rw-r--r-- | debian/changelog | 3 | ||||
-rw-r--r-- | scripts/Dpkg/Arch.pm | 28 | ||||
-rwxr-xr-x | scripts/dpkg-genchanges.pl | 4 | ||||
-rwxr-xr-x | scripts/dpkg-gencontrol.pl | 2 | ||||
-rw-r--r-- | scripts/t/Dpkg_Arch.t | 9 |
5 files changed, 36 insertions, 10 deletions
diff --git a/debian/changelog b/debian/changelog index 9b6533fc9..2d4f616f2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -18,6 +18,8 @@ dpkg (1.19.1) UNRELEASED; urgency=medium Reported by Jakub Wilk <jwilk@jwilk.net>. * Add new AS, STRIP, OBJCOPY, OBJDUMP, NM, AR and RANLIB buildtools variables to buildtools.mk. Prompted by Helmut Grohne <helmut@subdivi.de>. + * Restore rejecting negated architectures in Architecture field in + dpkg-gencontrol and dpkg-genchanges. Regression introduced in dpkg 1.18.5. * Perl modules: - Check that $tarname is defined before use in Dpkg::Source::Package::V1. Thanks to Christoph Biedl <debian.axhn@manchmal.in-ulm.de>. @@ -30,6 +32,7 @@ dpkg (1.19.1) UNRELEASED; urgency=medium - Check that $state->{seen} exists instead of $state being just defined. Fixes regression in dpkg-gensymbols symbols output. Thanks to Dmitry Shachnev <mitya57@debian.org>. Closes: #880166 + - Add new positive options argument to arch validators in Dpkg::Arch. * Documentation: - Update gettext minimal version in README. - Add a missing dot on the dpkg-buildflags(1) «lfs» feature paragraph. diff --git a/scripts/Dpkg/Arch.pm b/scripts/Dpkg/Arch.pm index c3e891526..14709d6cc 100644 --- a/scripts/Dpkg/Arch.pm +++ b/scripts/Dpkg/Arch.pm @@ -36,7 +36,7 @@ use strict; use warnings; use feature qw(state); -our $VERSION = '1.02'; +our $VERSION = '1.03'; our @EXPORT_OK = qw( get_raw_build_arch get_raw_host_arch @@ -599,17 +599,25 @@ sub debarch_is_wildcard($) return 0; } -=item $bool = debarch_is_illegal($arch) +=item $bool = debarch_is_illegal($arch, %options) Validate an architecture name. +If the "positive" option is set to a true value, only positive architectures +will be accepted, otherwise negated architectures are allowed. + =cut sub debarch_is_illegal { - my ($arch) = @_; + my ($arch, %opts) = @_; + my $arch_re = qr/[a-zA-Z0-9][a-zA-Z0-9-]*/; - return $arch !~ m/^!?[a-zA-Z0-9][a-zA-Z0-9-]*$/; + if ($opts{positive}) { + return $arch !~ m/^$arch_re$/; + } else { + return $arch !~ m/^!?$arch_re$/; + } } =item $bool = debarch_is_concerned($arch, @arches) @@ -651,15 +659,18 @@ sub debarch_is_concerned Parse an architecture list. +If the "positive" option is set to a true value, only positive architectures +will be accepted, otherwise negated architectures are allowed. + =cut sub debarch_list_parse { - my $arch_list = shift; + my ($arch_list, %opts) = @_; my @arch_list = split ' ', $arch_list; foreach my $arch (@arch_list) { - if (debarch_is_illegal($arch)) { + if (debarch_is_illegal($arch, %opts)) { error(g_("'%s' is not a legal architecture in list '%s'"), $arch, $arch_list); } @@ -676,6 +687,11 @@ __END__ =head1 CHANGES +=head2 Version 1.03 (dpkg 1.19.1) + +New argument: Accept a "positive" option in debarch_is_illegal() and +debarch_list_parse(). + =head2 Version 1.02 (dpkg 1.18.19) New import tags: ":all", ":getters", ":parsers", ":mappers", ":operators". diff --git a/scripts/dpkg-genchanges.pl b/scripts/dpkg-genchanges.pl index 84bdc4ba6..4f4b33608 100755 --- a/scripts/dpkg-genchanges.pl +++ b/scripts/dpkg-genchanges.pl @@ -369,7 +369,7 @@ foreach my $pkg ($control->get_packages()) { # No files for this package... warn if it's unexpected if (((build_has_any(BUILD_ARCH_INDEP) and debarch_eq('all', $a)) or (build_has_any(BUILD_ARCH_DEP) and - (any { debarch_is($host_arch, $_) } debarch_list_parse($a)))) and + (any { debarch_is($host_arch, $_) } debarch_list_parse($a, positive => 1)))) and (@restrictions == 0 or evaluate_restriction_formula(\@restrictions, \@profiles))) { @@ -388,7 +388,7 @@ foreach my $pkg ($control->get_packages()) { $f2pricf{$_} = $v foreach (@f); } elsif (m/^Architecture$/) { if (build_has_any(BUILD_ARCH_DEP) and - (any { debarch_is($host_arch, $_) } debarch_list_parse($v))) { + (any { debarch_is($host_arch, $_) } debarch_list_parse($v, positive => 1))) { $v = $host_arch; } elsif (!debarch_eq('all', $v)) { $v = ''; diff --git a/scripts/dpkg-gencontrol.pl b/scripts/dpkg-gencontrol.pl index 2e656a246..1c92e66dd 100755 --- a/scripts/dpkg-gencontrol.pl +++ b/scripts/dpkg-gencontrol.pl @@ -217,7 +217,7 @@ foreach (keys %{$pkg}) { if (debarch_eq('all', $v)) { $fields->{$_} = $v; } else { - my @archlist = debarch_list_parse($v); + my @archlist = debarch_list_parse($v, positive => 1); if (none { debarch_is($host_arch, $_) } @archlist) { error(g_("current host architecture '%s' does not " . diff --git a/scripts/t/Dpkg_Arch.t b/scripts/t/Dpkg_Arch.t index 525817085..0ef9d1899 100644 --- a/scripts/t/Dpkg_Arch.t +++ b/scripts/t/Dpkg_Arch.t @@ -16,7 +16,7 @@ use strict; use warnings; -use Test::More tests => 16367; +use Test::More tests => 16369; use_ok('Dpkg::Arch', qw(debarch_to_debtuple debarch_to_multiarch debarch_eq debarch_is debarch_is_wildcard @@ -148,9 +148,16 @@ my @arch_ref; @arch_new = debarch_list_parse('amd64 !arm64 linux-i386 !kfreebsd-any'); is_deeply(\@arch_new, \@arch_ref, 'parse valid arch list'); +@arch_ref = qw(amd64 arm64 linux-i386 kfreebsd-any); +@arch_new = debarch_list_parse('amd64 arm64 linux-i386 kfreebsd-any', positive => 1); +is_deeply(\@arch_new, \@arch_ref, 'parse valid positive arch list'); + eval { @arch_new = debarch_list_parse('!amd64!arm64') }; ok($@, 'parse concatenated arches failed'); +eval { @arch_new = debarch_list_parse('amd64 !arm64 !mips', positive => 1) }; +ok($@, 'parse disallowed negated arches failed'); + is(debarch_to_abiattrs(undef), undef, 'undef ABI attrs'); is_deeply([ debarch_to_abiattrs('amd64') ], [ qw(64 little) ], 'amd64 ABI attrs'); |