summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2017-06-26 18:44:56 +0200
committerJulian Andres Klode <jak@debian.org>2017-06-28 19:50:26 +0200
commit6edfda8b45dee7e1202f723b98fa962c38554c51 (patch)
tree328327b85410cc8b5e384e5c35b1162ac3f67d51
parentdfe0e754a808aabd55f9cd68201a7f1432070836 (diff)
Strip 0: epochs from the version hash
This should fix some issues with dpkg normalizing such values. Suprisingly enough apt treats the Version: field the same, even with epoch vs without, but not when searching, and does not strip the 0: from the output.
-rw-r--r--apt-pkg/deb/deblistparser.cc5
-rwxr-xr-xtest/integration/test-dpkg-normalization44
2 files changed, 49 insertions, 0 deletions
diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc
index 4e61f0fc2..3a26b40c4 100644
--- a/apt-pkg/deb/deblistparser.cc
+++ b/apt-pkg/deb/deblistparser.cc
@@ -372,6 +372,11 @@ unsigned short debListParser::VersionHash()
string to make that not matter. */
for (; Start != End; ++Start)
{
+ // Strip away 0: epochs from input
+ if (*Start == '0' && Start[1] == ':') {
+ Start++; // Skip the :
+ continue; // Skip the 0
+ }
if (isspace_ascii(*Start) != 0 || *Start == '=')
continue;
Result = AddCRC16Byte(Result, tolower_ascii_unsafe(*Start));
diff --git a/test/integration/test-dpkg-normalization b/test/integration/test-dpkg-normalization
new file mode 100755
index 000000000..cfcb90d67
--- /dev/null
+++ b/test/integration/test-dpkg-normalization
@@ -0,0 +1,44 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+
+insertpackage 'unstable' 'spaces' 'i386' '1.0' 'Depends: spaces (= 1.0)'
+insertpackage 'unstable' 'spaces' 'i386' '1.0' 'Depends: spaces (= 1.0)'
+insertpackage 'unstable' 'lessequal' 'i386' '1.0' 'Depends: spaces (>= 1.0)'
+insertpackage 'unstable' 'lessequal' 'i386' '1.0' 'Depends: spaces (> 1.0)'
+insertpackage 'unstable' 'zero-epoch' 'i386' '1.0' 'Depends: spaces (< 0:1.0.0)'
+insertpackage 'unstable' 'zero-epoch' 'i386' '1.0' 'Depends: spaces (< 1.0.0)'
+insertpackage 'unstable' 'zero-epoch' 'i386' '0:1.0' 'Depends: spaces (< 0:1.0.0)'
+
+setupaptarchive
+
+testsuccessequal "spaces:
+ Installed: (none)
+ Candidate: 1.0
+ Version table:
+ 1.0 500
+ 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages
+ 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages" aptcache policy spaces
+
+testsuccessequal "lessequal:
+ Installed: (none)
+ Candidate: 1.0
+ Version table:
+ 1.0 500
+ 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages
+ 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages" aptcache policy lessequal
+
+
+
+testsuccessequal "zero-epoch:
+ Installed: (none)
+ Candidate: 1.0
+ Version table:
+ 1.0 500
+ 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages
+ 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages
+ 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages" aptcache policy zero-epoch