diff options
author | Julian Andres Klode <jak@debian.org> | 2017-06-26 18:44:56 +0200 |
---|---|---|
committer | Julian Andres Klode <jak@debian.org> | 2017-06-28 19:50:26 +0200 |
commit | 6edfda8b45dee7e1202f723b98fa962c38554c51 (patch) | |
tree | 328327b85410cc8b5e384e5c35b1162ac3f67d51 | |
parent | dfe0e754a808aabd55f9cd68201a7f1432070836 (diff) | |
download | apt-6edfda8b45dee7e1202f723b98fa962c38554c51.tar.gz |
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.cc | 5 | ||||
-rwxr-xr-x | test/integration/test-dpkg-normalization | 44 |
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 |