When displaying anscestors of an unstatisfied dependency (code from bug
authorZac Medico <zmedico@gentoo.org>
Sun, 23 Nov 2008 00:30:55 +0000 (00:30 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 23 Nov 2008 00:30:55 +0000 (00:30 -0000)
#245358), avoid a potential infinite loop and memory leak triggered by
circular dependencies. Thanks to Peter Weller <welp@g.o> for reporting.

svn path=/main/trunk/; revision=12045

pym/_emerge/__init__.py

index fe810ab78c8a06ad86a9030b914302e0d4e8f92a..1dd0575d8903e23608e3ef878d36f014a32479f0 100644 (file)
@@ -5404,13 +5404,18 @@ class depgraph(object):
                        print "\nemerge: there are no ebuilds to satisfy "+green(xinfo)+"."
 
                # Show parent nodes and the argument that pulled them in.
+               traversed_nodes = set()
                node = myparent
                msg = []
                while node is not None:
+                       traversed_nodes.add(node)
                        msg.append('(dependency required by "%s" [%s])' % \
                                (colorize('INFORM', str(node.cpv)), node.type_name))
                        parent = None
                        for parent in self.digraph.parent_nodes(node):
+                               if parent in traversed_nodes:
+                                       parent = None
+                                       continue
                                if isinstance(parent, DependencyArg):
                                        msg.append('(dependency required by "%s" [argument])' % \
                                                (colorize('INFORM', str(parent))))