summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Freeman (saurik) <saurik@saurik.com>2016-11-29 23:58:01 -0800
committerJay Freeman (saurik) <saurik@saurik.com>2016-11-29 23:58:01 -0800
commit4e99adb0d3727c0ae41edc9b3f52448d0d5b7655 (patch)
treef0143e67baba31c796461bd2efa8d48f6ef5fa71
parentef1e4dfd2853abb2e8900c26c1c17bf053863e85 (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 ec5787fb4..258344009 100644
--- a/apt-pkg/deb/deblistparser.cc
+++ b/apt-pkg/deb/deblistparser.cc
@@ -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) {
diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc
index 8a8c88422..1bdd43bf8 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;
@@ -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)
diff --git a/apt-pkg/tagfile.cc b/apt-pkg/tagfile.cc
index 200a7f2fd..72dd475b3 100644
--- a/apt-pkg/tagfile.cc
+++ b/apt-pkg/tagfile.cc
@@ -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);