summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2021-08-29 13:50:31 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2021-08-29 14:23:26 +0200
commit5f6bbfa53c32ec30aff6a2bc8c412616049eab18 (patch)
treef5d45af268d53f4ac0e741fd399d2fd044501f88 /apt-pkg
parentc7e368aafe099dcd966cf5994ae7fb418d268278 (diff)
Increase recursion limits from 100 to 3000
If you install dpkg on an empty status file with all recommends and suggests apt wants to install 4000+ packages. The deepest chain seemingly being 236 steps long. And dpkg isn't even the worst (~259). That is a problem as libapt has a hardcoded recursion limit for MarkInstall and friends … set to 100. We are saved by the fact that chains without suggests are much shorter (dpkg has 5, max seems ~43), but I ignored Conflicts in these chains, which typically trigger upgrades, so if two of the worst are chained together we suddenly get dangerously close to the limit still. So, lets just increase the limit into oblivion as it is really just a safety measure we should not be running into to begin with. MarkPackage was running years without it after all. 3000 is picked as a nice number as any other and because it is roughly the half of the stack crashs I saw previously in this branch.
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/depcache.cc8
1 files changed, 4 insertions, 4 deletions
diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc
index 7c14d0e05..460fb296e 100644
--- a/apt-pkg/depcache.cc
+++ b/apt-pkg/depcache.cc
@@ -894,8 +894,8 @@ static char const* PrintMode(char const mode)
static bool IsModeChangeOk(pkgDepCache &Cache, pkgDepCache::ModeList const mode, pkgCache::PkgIterator const &Pkg,
unsigned long const Depth, bool const FromUser, bool const DebugMarker)
{
- // we are not trying to hard…
- if (unlikely(Depth > 100))
+ // we are not trying too hard…
+ if (unlikely(Depth > 3000))
return false;
// general sanity
@@ -2249,8 +2249,8 @@ static bool MarkPackage(pkgCache::PkgIterator const &Pkg,
return true;
}
- // we are not trying to hard…
- if (unlikely(Depth > 100))
+ // we are not trying too hard…
+ if (unlikely(Depth > 3000))
return false;
PkgState[Pkg->ID].Marked = true;