]> git.saurik.com Git - apt.git/commitdiff
check internal redirections for loops, too
authorDavid Kalnischkies <david@kalnischkies.de>
Sun, 14 Aug 2016 10:13:59 +0000 (12:13 +0200)
committerDavid Kalnischkies <david@kalnischkies.de>
Wed, 17 Aug 2016 05:55:45 +0000 (07:55 +0200)
Now that we have the redirections loopchecker centrally in our items we
can use it also to prevent internal redirections to loop caused by
bugs as in a few instances we get into the business of rewriting the URI
we will query by ourself as we predict we would see such a redirect
anyway. Our code has no bugs of course, hence no practical difference. ;)

Gbp-Dch: Ignore

apt-pkg/acquire-item.cc
apt-pkg/acquire-worker.cc

index f13d2f6aefa1befe49a117d575b973d22a7d4ca3..623ea75184becaae5c44b0c7fd184b7afc0a0f28 100644 (file)
@@ -991,6 +991,9 @@ std::string pkgAcquire::Item::HashSum() const                               /*{{{*/
                                                                        /*}}}*/
 bool pkgAcquire::Item::IsRedirectionLoop(std::string const &NewURI)    /*{{{*/
 {
+   // store can fail due to permission errors and the item will "loop" then
+   if (APT::String::Startswith(NewURI, "store:"))
+      return false;
    if (d->PastRedirections.empty())
    {
       d->PastRedirections.push_back(NewURI);
index aa1a2654e0a47a8e3d70c9eb09c483647e39cd59..a4fbc765157b4ee0f410b014a5ee28800ab11b76 100644 (file)
@@ -686,6 +686,25 @@ bool pkgAcquire::Worker::QueueItem(pkgAcquire::Queue::QItem *Item)
       return true;
    }
 
+   if (Item->Owner->IsRedirectionLoop(Item->URI))
+   {
+      std::string const Message = "400 URI Failure"
+        "\nURI: " + Item->URI +
+        "\nFilename: " + Item->Owner->DestFile +
+        "\nFailReason: RedirectionLoop";
+
+      auto const ItmOwners = Item->Owners;
+      for (auto &O: ItmOwners)
+      {
+        O->Status = pkgAcquire::Item::StatError;
+        O->Failed(Message, Config);
+        if (Log != nullptr)
+           Log->Fail(O->GetItemDesc());
+      }
+      // "queued" successfully, the item just instantly failed
+      return true;
+   }
+
    string Message = "600 URI Acquire\n";
    Message.reserve(300);
    Message += "URI: " + Item->URI;