Summary: | sys-apps/portage-2.3.78: custom local mirrors can trigger infinite recursion in fetch | ||
---|---|---|---|
Product: | Portage Development | Reporter: | Zac Medico <zmedico> |
Component: | Core | Assignee: | Portage team <dev-portage> |
Status: | RESOLVED FIXED | ||
Severity: | normal | Keywords: | InVCS, REGRESSION |
Priority: | Normal | ||
Version: | unspecified | ||
Hardware: | All | ||
OS: | Linux | ||
Whiteboard: | |||
Package list: | Runtime testing required: | --- | |
Bug Depends on: | |||
Bug Blocks: | 697734 |
The bug has been referenced in the following commit(s): https://gitweb.gentoo.org/proj/portage.git/commit/?id=26fd7ffdd5b74af3aeedf0e6a87ac6b3d1243848 commit 26fd7ffdd5b74af3aeedf0e6a87ac6b3d1243848 Author: Zac Medico <zmedico@gentoo.org> AuthorDate: 2019-10-24 19:28:40 +0000 Commit: Zac Medico <zmedico@gentoo.org> CommitDate: 2019-10-24 19:29:26 +0000 fetch: respect try_mirrors parameter for local mirrors This is needed in order to prevent infinit recursion like this: File "portage/package/ebuild/fetch.py", line 1131, in fetch loc = loc() File "portage/package/ebuild/fetch.py", line 424, in get_mirror_url mysettings, force=1, try_mirrors=0): File "portage/package/ebuild/fetch.py", line 1131, in fetch loc = loc() Bug: https://bugs.gentoo.org/698474 Signed-off-by: Zac Medico <zmedico@gentoo.org> lib/portage/package/ebuild/fetch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) The bug has been closed via the following commit(s): https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=f13f09de05113a98cecb840b4e6343002fcbc101 commit f13f09de05113a98cecb840b4e6343002fcbc101 Author: Zac Medico <zmedico@gentoo.org> AuthorDate: 2019-10-24 19:37:51 +0000 Commit: Zac Medico <zmedico@gentoo.org> CommitDate: 2019-10-24 19:40:29 +0000 sys-apps/portage: 2.3.78-r1 revbump for bug 698474 Closes: https://bugs.gentoo.org/698474 Bug: https://bugs.gentoo.org/697734 Package-Manager: Portage-2.3.78, Repoman-2.3.17 Signed-off-by: Zac Medico <zmedico@gentoo.org> sys-apps/portage/{portage-2.3.78.ebuild => portage-2.3.78-r1.ebuild} | 3 +++ 1 file changed, 3 insertions(+) |
If you have a local mirror in /etc/portage/mirrors then it can trigger infinite recursion when `repoman manifest` attempts to fetch a file: > File "/usr/lib64/python3.6/site-packages/portage/package/ebuild/fetch.py", line 1131, in fetch > loc = loc() > File "/usr/lib64/python3.6/site-packages/portage/package/ebuild/fetch.py", line 424, in get_mirror_url > mysettings, force=1, try_mirrors=0): > File "/usr/lib64/python3.6/site-packages/portage/package/ebuild/fetch.py", line 1131, in fetch > loc = loc() > File "/usr/lib64/python3.6/site-packages/portage/package/ebuild/fetch.py", line 424, in get_mirror_url > mysettings, force=1, try_mirrors=0): > File "/usr/lib64/python3.6/site-packages/portage/package/ebuild/fetch.py", line 1131, in fetch > loc = loc() > File "/usr/lib64/python3.6/site-packages/portage/package/ebuild/fetch.py", line 424, in get_mirror_url > mysettings, force=1, try_mirrors=0): > File "/usr/lib64/python3.6/site-packages/portage/package/ebuild/fetch.py", line 611, in fetch > pkgdir, mysettings["DISTDIR"]).getTypeDigests("DIST") > File "/usr/lib64/python3.6/site-packages/portage/repository/config.py", line 424, in load_manifest > return manifest.Manifest(*args, **kwds) > File "/usr/lib64/python3.6/site-packages/portage/manifest.py", line 168, in __init__ > self._read() > File "/usr/lib64/python3.6/site-packages/portage/manifest.py", line 218, in _read > self._readManifest(self.getFullname(), myhashdict=self.fhashdict) > File "/usr/lib64/python3.6/site-packages/portage/manifest.py", line 207, in _readManifest > self._parseDigests(f, myhashdict=myhashdict, **kwargs) > File "/usr/lib64/python3.6/site-packages/portage/manifest.py", line 237, in _parseDigests > for myentry in self._parseManifestLines(mylines): > File "/usr/lib64/python3.6/site-packages/portage/manifest.py", line 227, in _parseManifestLines > myentry = parser(myline) > File "/usr/lib64/python3.6/site-packages/portage/manifest.py", line 88, in parseManifest2 > name=match.group(2), hashes=hashes) > RecursionError: maximum recursion depth exceeded while calling a Python object