summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Freeman (saurik) <saurik@saurik.com>2016-11-29 23:58:01 -0800
committerSam Bingner <sam@bingner.com>2019-08-17 12:34:41 -1000
commit13136de508adca373ea90d7c069777d03a6110e5 (patch)
tree3329d5dee169ac93f47b18c1f3edac7538f6efb9
parent44cf45b356578c70a9b580d65ea33dab4cfa9306 (diff)
Avoid wedging the entire system if recoverable :/.
-rw-r--r--apt-pkg/deb/deblistparser.cc12
-rw-r--r--apt-pkg/pkgcachegen.cc40
-rw-r--r--apt-pkg/tagfile.cc2
3 files changed, 31 insertions, 23 deletions
diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc
index 01fdf0079..91252da5e 100644
--- a/apt-pkg/deb/deblistparser.cc
+++ b/apt-pkg/deb/deblistparser.cc
@@ -860,8 +860,10 @@ bool debListParser::ParseDepends(pkgCache::VerIterator &Ver,
unsigned int Op;
Start = ParseDepends(Start, Stop, Package, Version, Op, false, false, false, myArch);
- 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)
@@ -928,8 +930,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) {
diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc
index a508644fc..696155621 100644
--- a/apt-pkg/pkgcachegen.cc
+++ b/apt-pkg/pkgcachegen.cc
@@ -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;
@@ -1592,7 +1596,7 @@ static bool BuildCache(pkgCacheGenerator &Gen,
}
if ((*i)->Merge(Gen, Progress) == false)
- return false;
+ continue;
std::vector <pkgIndexFile *> *Indexes = (*i)->GetIndexFiles();
if (Indexes != NULL)
diff --git a/apt-pkg/tagfile.cc b/apt-pkg/tagfile.cc
index 1e7f2867c..919172f89 100644
--- a/apt-pkg/tagfile.cc
+++ b/apt-pkg/tagfile.cc
@@ -214,7 +214,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);