diff options
-rw-r--r-- | apt-pkg/deb/deblistparser.cc | 7 | ||||
-rw-r--r-- | apt-pkg/deb/debrecords.cc | 8 | ||||
-rwxr-xr-x | test/integration/test-bug-807012-mixed-case-package-names | 21 |
3 files changed, 34 insertions, 2 deletions
diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc index 229cfc29b..bf9bc75ec 100644 --- a/apt-pkg/deb/deblistparser.cc +++ b/apt-pkg/deb/deblistparser.cc @@ -57,7 +57,12 @@ debListParser::debListParser(FileFd *File) : // --------------------------------------------------------------------- /* This is to return the name of the package this section describes */ string debListParser::Package() { - string const Result = Section.FindS("Package"); + string Result = Section.FindS("Package"); + + // Normalize mixed case package names to lower case, like dpkg does + // See Bug#807012 for details + std::transform(Result.begin(), Result.end(), Result.begin(), tolower_ascii); + if(unlikely(Result.empty() == true)) _error->Error("Encountered a section with no Package: header"); return Result; diff --git a/apt-pkg/deb/debrecords.cc b/apt-pkg/deb/debrecords.cc index d78a7e2e0..beaa83bd9 100644 --- a/apt-pkg/deb/debrecords.cc +++ b/apt-pkg/deb/debrecords.cc @@ -65,7 +65,13 @@ string debRecordParserBase::FileName() // RecordParserBase::Name - Return the package name /*{{{*/ string debRecordParserBase::Name() { - return Section.FindS("Package"); + string Result = Section.FindS("Package"); + + // Normalize mixed case package names to lower case, like dpkg does + // See Bug#807012 for details + std::transform(Result.begin(), Result.end(), Result.begin(), tolower_ascii); + + return Result; } /*}}}*/ // RecordParserBase::Homepage - Return the package homepage /*{{{*/ diff --git a/test/integration/test-bug-807012-mixed-case-package-names b/test/integration/test-bug-807012-mixed-case-package-names new file mode 100755 index 000000000..65da7b146 --- /dev/null +++ b/test/integration/test-bug-807012-mixed-case-package-names @@ -0,0 +1,21 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +TMPDIR=$(readlink -f .) + +insertinstalledpackage 'worldofgoo' 'all' '1' +insertpackage 'unstable' 'WorldOfGoo' 'all' '1' + +setupaptarchive + +testsuccessequal "worldofgoo: + Installed: 1 + Candidate: 1 + Version table: + *** 1 500 + 500 file:${TMPDIR}/aptarchive unstable/main all Packages + 100 ${TMPDIR}/rootdir/var/lib/dpkg/status" \ + aptcache policy worldofgoo |