ソースを参照

Convert package names from Packages files to lower case

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
Julian Andres Klode 10 年 前
コミット
fffa3b57b4
共有3 個のファイルを変更した34 個の追加2 個の削除を含む
  1. 6 1
      apt-pkg/deb/deblistparser.cc
  2. 7 1
      apt-pkg/deb/debrecords.cc
  3. 21 0
      test/integration/test-bug-807012-mixed-case-package-names

+ 6 - 1
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;

+ 7 - 1
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		/*{{{*/

+ 21 - 0
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