summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2017-05-30 22:24:14 +0200
committerJulian Andres Klode <jak@debian.org>2017-06-19 13:52:57 +0200
commitaefd6603008fdc304bf41215fe724ac056d80a30 (patch)
tree6453a7d876497faa0849a3f6bda3ce0a20027882 /test
parent36c2f157ab8f44283da66752730565fdd7259b08 (diff)
Fix parsing of or groups in build-deps with ignored packages
If the last alternative(s) of an Or group is ignored, because it does not match an architecture list, we would end up keeping the or flag, effectively making the next AND an OR. For example, when parsing (on amd64): debhelper (>= 9), libnacl-dev [amd64] | libnacl-dev [i386] => debhelper (>= 9), libnacl-dev | Which can cause python-apt to crash. Even worse: debhelper (>= 9), libnacl-dev [amd64] | libnacl-dev [i386], foobar => debhelper (>= 9), libnacl-dev [amd64] | foobar By setting the previous alternatives Or flag to the current Or flag if the current alternative is ignored, we solve the issue. LP: #1694697 (cherry picked from commit 7ddf958e370d13f93edc6923bee289b2f6444b41) (cherry picked from commit 423ba4a958b9da02926e586bf59995817cafc32a)
Diffstat (limited to 'test')
-rwxr-xr-xtest/integration/test-bug-lp1694697-build-dep-architecture-limited-alternative58
1 files changed, 58 insertions, 0 deletions
diff --git a/test/integration/test-bug-lp1694697-build-dep-architecture-limited-alternative b/test/integration/test-bug-lp1694697-build-dep-architecture-limited-alternative
new file mode 100755
index 000000000..7f8e4ad3d
--- /dev/null
+++ b/test/integration/test-bug-lp1694697-build-dep-architecture-limited-alternative
@@ -0,0 +1,58 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+
+
+insertpackage 'stable' 'build-depends' 'i386' '1'
+insertpackage 'stable' 'foo' 'i386' '1'
+insertinstalledpackage 'build-essential' 'i386' '1'
+
+setupaptarchive
+
+# This used to be interpreted as build-depends | foo
+cat > foobar.dsc <<EOF
+Format: 3.0 (native)
+Source: foobar
+Binary: foobar
+Architecture: all
+Version: 1
+Maintainer: Joe Sixpack <joe@example.org>
+Build-Depends: build-depends [i386] | build-depends [amd64], foo
+Standards-Version: 3.9.8
+EOF
+testsuccessequal "Note, using file './foobar.dsc' to get the build dependencies
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ build-depends foo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst build-depends (1 stable [i386])
+Inst foo (1 stable [i386])
+Conf build-depends (1 stable [i386])
+Conf foo (1 stable [i386])" aptget build-dep --simulate ./foobar.dsc
+
+
+# This caused a segmentation fault
+cat > foobar.dsc <<EOF
+Format: 3.0 (native)
+Source: foobar
+Binary: foobar
+Architecture: all
+Version: 1
+Maintainer: Joe Sixpack <joe@example.org>
+Build-Depends: build-depends [i386] | build-depends [amd64]
+Standards-Version: 3.9.8
+EOF
+testsuccessequal "Note, using file './foobar.dsc' to get the build dependencies
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ build-depends
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst build-depends (1 stable [i386])
+Conf build-depends (1 stable [i386])" aptget build-dep --simulate ./foobar.dsc