]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/contrib/hashes.cc
Merge commit 'e2073b0276226b625897ef475f225bf8f508719e' as 'triehash'
[apt.git] / apt-pkg / contrib / hashes.cc
index 4481321c4e0aad9ff83ae1ec59d0ec6bb07d0b0e..662c2bf8ba64b58a432ec17f721fe079282f24f1 100644 (file)
@@ -129,6 +129,24 @@ APT_PURE bool HashString::empty() const                                    /*{{{*/
    return (Type.empty() || Hash.empty());
 }
                                                                        /*}}}*/
    return (Type.empty() || Hash.empty());
 }
                                                                        /*}}}*/
+
+APT_PURE static bool IsConfigured(const char *name, const char *what)
+{
+   std::string option;
+   strprintf(option, "APT::Hashes::%s::%s", name, what);
+   return _config->FindB(option, false);
+}
+
+APT_PURE bool HashString::usable() const                               /*{{{*/
+{
+   return (
+      (Type != "Checksum-FileSize") &&
+      (Type != "MD5Sum") &&
+      (Type != "SHA1") &&
+      !IsConfigured(Type.c_str(), "Untrusted")
+   );
+}
+                                                                       /*}}}*/
 std::string HashString::toStr() const                                  /*{{{*/
 {
    return Type + ":" + Hash;
 std::string HashString::toStr() const                                  /*{{{*/
 {
    return Type + ":" + Hash;
@@ -151,10 +169,10 @@ bool HashStringList::usable() const                                       /*{{{*/
    std::string const forcedType = _config->Find("Acquire::ForceHash", "");
    if (forcedType.empty() == true)
    {
    std::string const forcedType = _config->Find("Acquire::ForceHash", "");
    if (forcedType.empty() == true)
    {
-      // FileSize alone isn't usable
-      for (std::vector<HashString>::const_iterator hs = list.begin(); hs != list.end(); ++hs)
-        if (hs->HashType() != "Checksum-FileSize")
-           return true;
+      // See if there is at least one usable hash
+      for (auto const &hs: list)
+         if (hs.usable())
+            return true;
       return false;
    }
    return find(forcedType) != NULL;
       return false;
    }
    return find(forcedType) != NULL;
@@ -294,6 +312,8 @@ public:
 // Hashes::Add* - Add the contents of data or FD                       /*{{{*/
 bool Hashes::Add(const unsigned char * const Data, unsigned long long const Size)
 {
 // Hashes::Add* - Add the contents of data or FD                       /*{{{*/
 bool Hashes::Add(const unsigned char * const Data, unsigned long long const Size)
 {
+   if (Size == 0)
+      return true;
    bool Res = true;
 APT_IGNORE_DEPRECATED_PUSH
    if ((d->CalcHashes & MD5SUM) == MD5SUM)
    bool Res = true;
 APT_IGNORE_DEPRECATED_PUSH
    if ((d->CalcHashes & MD5SUM) == MD5SUM)