summaryrefslogtreecommitdiff
path: root/apt-pkg/indexcopy.cc
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2017-09-09 19:17:37 +0200
committerJulian Andres Klode <jak@debian.org>2017-09-09 20:11:57 +0200
commit03ba8fcc5fe9560084b40b955067da7e60b2e1c0 (patch)
tree9da8b02083efe5fc30e753856f85c470cbfcb803 /apt-pkg/indexcopy.cc
parent5a747462baef6cecf6ed389c7b7492443930f7ed (diff)
cdrom: Don't hardcode "Files" field for copying source files
This fails if no Files field exists anymore, for example, because the Sources index only contains SHA256 hashes. Instead check all hashes.
Diffstat (limited to 'apt-pkg/indexcopy.cc')
-rw-r--r--apt-pkg/indexcopy.cc16
1 files changed, 15 insertions, 1 deletions
diff --git a/apt-pkg/indexcopy.cc b/apt-pkg/indexcopy.cc
index 968734118..d4cab1a04 100644
--- a/apt-pkg/indexcopy.cc
+++ b/apt-pkg/indexcopy.cc
@@ -438,7 +438,21 @@ bool PackageCopy::RewriteEntry(FileFd &Target,string const &File)
/* */
bool SourceCopy::GetFile(string &File,unsigned long long &Size)
{
- string Files = Section->FindS("Files");
+ string Files;
+
+ for (char const *const *type = HashString::SupportedHashes(); *type != NULL; ++type)
+ {
+ // derive field from checksum type
+ std::string checksumField("Checksums-");
+ if (strcmp(*type, "MD5Sum") == 0)
+ checksumField = "Files"; // historic name for MD5 checksums
+ else
+ checksumField.append(*type);
+
+ Files = Section->FindS(checksumField.c_str());
+ if (Files.empty() == false)
+ break;
+ }
if (Files.empty() == true)
return false;