]> git.saurik.com Git - apt.git/commitdiff
Avoid wedging the entire system if recoverable :/.
authorJay Freeman (saurik) <saurik@saurik.com>
Wed, 30 Nov 2016 07:58:01 +0000 (23:58 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Wed, 30 Nov 2016 07:58:01 +0000 (23:58 -0800)
apt-pkg/deb/deblistparser.cc
apt-pkg/pkgcachegen.cc
apt-pkg/tagfile.cc

index ec5787fb4d10710404b19007fe6d6fca24aeafe8..25834400911928c03ea2de321e7158db911dc8fb 100644 (file)
@@ -824,8 +824,10 @@ bool debListParser::ParseDepends(pkgCache::VerIterator &Ver,
       unsigned int Op;
 
       Start = ParseDepends(Start, Stop, Package, Version, Op, false, false, false);
-      if (Start == 0)
-        return _error->Error("Problem parsing dependency %zu",static_cast<size_t>(Key)); // TODO
+      if (Start == 0) {
+        _error->Warning("Problem parsing dependency %zu",static_cast<size_t>(Key)); // TODO
+         continue;
+      }
       size_t const found = Package.rfind(':');
 
       if (found == string::npos)
@@ -892,8 +894,10 @@ bool debListParser::ParseProvides(pkgCache::VerIterator &Ver)
       {
         Start = ParseDepends(Start,Stop,Package,Version,Op, false, false, false);
         const size_t archfound = Package.rfind(':');
-        if (Start == 0)
-           return _error->Error("Problem parsing Provides line");
+        if (Start == 0) {
+           _error->Warning("Problem parsing Provides line");
+            continue;
+         }
         if (unlikely(Op != pkgCache::Dep::NoOp && Op != pkgCache::Dep::Equals)) {
            _error->Warning("Ignoring Provides line with non-equal DepCompareOp for package %s", Package.to_string().c_str());
         } else if (archfound != string::npos) {
index 8a8c8842296942215686a0e06add983491b3ebc0..1bdd43bf8610d29ad772f391bdb5a731f8cd2d09 100644 (file)
@@ -249,8 +249,10 @@ bool pkgCacheGenerator::MergeList(ListParser &List,
    while (List.Step() == true)
    {
       string const PackageName = List.Package();
-      if (PackageName.empty() == true)
-        return false;
+      if (PackageName.empty() == true) {
+          _error->Warning("Encountered a section with no Package: header");
+          continue;
+      }
 
       Counter++;
       if (Counter % 100 == 0 && Progress != 0)
@@ -264,24 +266,26 @@ bool pkgCacheGenerator::MergeList(ListParser &List,
       {
         // package descriptions
         if (MergeListGroup(List, PackageName) == false)
-           return false;
+           continue;
         continue;
       }
 
       // Get a pointer to the package structure
       pkgCache::PkgIterator Pkg;
       Dynamic<pkgCache::PkgIterator> DynPkg(Pkg);
-      if (NewPackage(Pkg, PackageName, Arch) == false)
+      if (NewPackage(Pkg, PackageName, Arch) == false) {
         // TRANSLATOR: The first placeholder is a package name,
         // the other two should be copied verbatim as they include debug info
-        return _error->Error(_("Error occurred while processing %s (%s%d)"),
+        _error->Warning(_("Error occurred while processing %s (%s%d)"),
                              PackageName.c_str(), "NewPackage", 1);
+         continue;
+      }
 
 
       if (Version.empty() == true)
       {
         if (MergeListPackage(List, Pkg) == false)
-           return false;
+           continue;
       }
       else
       {
@@ -336,7 +340,7 @@ bool pkgCacheGenerator::MergeListPackage(ListParser &List, pkgCache::PkgIterator
    pkgCache::VerIterator Ver(Cache);
    Dynamic<pkgCache::VerIterator> DynVer(Ver);
    if (List.UsePackage(Pkg, Ver) == false)
-      return _error->Error(_("Error occurred while processing %s (%s%d)"),
+      return _error->Warning(_("Error occurred while processing %s (%s%d)"),
                           Pkg.Name(), "UsePackage", 1);
 
    // Find the right version to write the description
@@ -415,11 +419,11 @@ bool pkgCacheGenerator::MergeListVersion(ListParser &List, pkgCache::PkgIterator
       if (Res == 0 && Ver.end() == false && Ver->Hash == Hash)
       {
         if (List.UsePackage(Pkg,Ver) == false)
-           return _error->Error(_("Error occurred while processing %s (%s%d)"),
+           return _error->Warning(_("Error occurred while processing %s (%s%d)"),
                                 Pkg.Name(), "UsePackage", 2);
 
         if (NewFileVer(Ver,List) == false)
-           return _error->Error(_("Error occurred while processing %s (%s%d)"),
+           return _error->Warning(_("Error occurred while processing %s (%s%d)"),
                                 Pkg.Name(), "NewFileVer", 1);
 
         // Read only a single record and return
@@ -436,7 +440,7 @@ bool pkgCacheGenerator::MergeListVersion(ListParser &List, pkgCache::PkgIterator
    // Add a new version
    map_pointer_t const verindex = NewVersion(Ver, Version, Pkg.Index(), Hash, *LastVer);
    if (unlikely(verindex == 0))
-      return _error->Error(_("Error occurred while processing %s (%s%d)"),
+      return _error->Warning(_("Error occurred while processing %s (%s%d)"),
                           Pkg.Name(), "NewVersion", 1);
 
    if (oldMap != Map.Data())
@@ -444,15 +448,15 @@ bool pkgCacheGenerator::MergeListVersion(ListParser &List, pkgCache::PkgIterator
    *LastVer = verindex;
 
    if (unlikely(List.NewVersion(Ver) == false))
-      return _error->Error(_("Error occurred while processing %s (%s%d)"),
+      return _error->Warning(_("Error occurred while processing %s (%s%d)"),
                           Pkg.Name(), "NewVersion", 2);
 
    if (unlikely(List.UsePackage(Pkg,Ver) == false))
-      return _error->Error(_("Error occurred while processing %s (%s%d)"),
+      return _error->Warning(_("Error occurred while processing %s (%s%d)"),
                           Pkg.Name(), "UsePackage", 3);
 
    if (unlikely(NewFileVer(Ver,List) == false))
-      return _error->Error(_("Error occurred while processing %s (%s%d)"),
+      return _error->Warning(_("Error occurred while processing %s (%s%d)"),
                           Pkg.Name(), "NewFileVer", 2);
 
    pkgCache::GrpIterator Grp = Pkg.Group();
@@ -473,12 +477,12 @@ bool pkgCacheGenerator::MergeListVersion(ListParser &List, pkgCache::PkgIterator
         Dynamic<pkgCache::VerIterator> DynV(V);
         for (; V.end() != true; ++V)
            if (unlikely(AddImplicitDepends(V, Pkg) == false))
-              return _error->Error(_("Error occurred while processing %s (%s%d)"),
+              return _error->Warning(_("Error occurred while processing %s (%s%d)"),
                                    Pkg.Name(), "AddImplicitDepends", 1);
       }
    }
    if (unlikely(AddImplicitDepends(Grp, Pkg, Ver) == false))
-      return _error->Error(_("Error occurred while processing %s (%s%d)"),
+      return _error->Warning(_("Error occurred while processing %s (%s%d)"),
                           Pkg.Name(), "AddImplicitDepends", 2);
 
    // Read only a single record and return
@@ -522,7 +526,7 @@ bool pkgCacheGenerator::AddNewDescription(ListParser &List, pkgCache::VerIterato
 
    map_pointer_t const descindex = NewDescription(Desc, lang, CurMd5, md5idx);
    if (unlikely(descindex == 0))
-      return _error->Error(_("Error occurred while processing %s (%s%d)"),
+      return _error->Warning(_("Error occurred while processing %s (%s%d)"),
            Ver.ParentPkg().Name(), "NewDescription", 1);
 
    md5idx = Desc->md5sum;
@@ -536,7 +540,7 @@ bool pkgCacheGenerator::AddNewDescription(ListParser &List, pkgCache::VerIterato
    *LastNextDesc = descindex;
 
    if (NewFileDesc(Desc,List) == false)
-      return _error->Error(_("Error occurred while processing %s (%s%d)"),
+      return _error->Warning(_("Error occurred while processing %s (%s%d)"),
            Ver.ParentPkg().Name(), "NewFileDesc", 1);
 
    return true;
@@ -1589,7 +1593,7 @@ static bool BuildCache(pkgCacheGenerator &Gen,
         }
 
         if ((*i)->Merge(Gen, Progress) == false)
-           return false;
+           continue;
 
         std::vector <pkgIndexFile *> *Indexes = (*i)->GetIndexFiles();
         if (Indexes != NULL)
index 200a7f2fdc7e6269974fb73b88d9804097a72d32..72dd475b363a9d81a85e5c80ce727f273ddaaf58 100644 (file)
@@ -215,7 +215,7 @@ bool pkgTagFile::Step(pkgTagSection &Tag)
            break;
 
         if (Resize() == false)
-           return _error->Error(_("Unable to parse package file %s (%d)"),
+           return _error->Warning(_("Unable to parse package file %s (%d)"),
                  d->Fd->Name().c_str(), 1);
 
       } while (Tag.Scan(d->Start,d->End - d->Start, false) == false);