diff options
author | David Kalnischkies <david@kalnischkies.de> | 2021-08-29 13:50:31 +0200 |
---|---|---|
committer | David Kalnischkies <david@kalnischkies.de> | 2021-08-29 14:23:26 +0200 |
commit | 5f6bbfa53c32ec30aff6a2bc8c412616049eab18 (patch) | |
tree | f5d45af268d53f4ac0e741fd399d2fd044501f88 /apt-pkg | |
parent | c7e368aafe099dcd966cf5994ae7fb418d268278 (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.cc | 8 |
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; |