]> git.saurik.com Git - apt.git/commitdiff
Convert package names from Packages files to lower case
authorJulian Andres Klode <jak@debian.org>
Fri, 11 Dec 2015 13:27:56 +0000 (14:27 +0100)
committerJulian Andres Klode <jak@debian.org>
Fri, 11 Dec 2015 13:48:21 +0000 (14:48 +0100)
dpkg does that when reading package files, so we should do
the same. This only deals with parsing names from binary
package paragraphs, it does not look at source package names
and/or the list of binaries in a dsc file.

Closes: #807012
apt-pkg/deb/deblistparser.cc
apt-pkg/deb/debrecords.cc
test/integration/test-bug-807012-mixed-case-package-names [new file with mode: 0755]

index 229cfc29b2803c1628b99cb5c399c847f1e6e56f..bf9bc75ecffe3fe62fb3a96534ae803bd1db6e45 100644 (file)
@@ -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;
index d78a7e2e0cd4394005f00238f8d1a54ba684c94f..beaa83bd9e279647dbdadbd4394ff2785ec80038 100644 (file)
@@ -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 (executable)
index 0000000..65da7b1
--- /dev/null
@@ -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