Skip to content

Commit b12bb3c

Browse files
committed
Guard document replacement following methods against infinite recursion on circular relationships.
- Legacy-Id: 14457
1 parent 01af0af commit b12bb3c

1 file changed

Lines changed: 4 additions & 6 deletions

File tree

ietf/doc/utils.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -650,22 +650,20 @@ def extract_complete_replaces_ancestor_mapping_for_docs(names):
650650
def make_rev_history(doc):
651651
# return document history data for inclusion in doc.json (used by timeline)
652652

653-
def get_predecessors(doc):
654-
predecessors = []
653+
def get_predecessors(doc, predecessors=[]):
655654
if hasattr(doc, 'relateddocument_set'):
656655
for alias in doc.related_that_doc('replaces'):
657656
if alias.document not in predecessors:
658657
predecessors.append(alias.document)
659-
predecessors.extend(get_predecessors(alias.document))
658+
predecessors.extend(get_predecessors(alias.document, predecessors))
660659
return predecessors
661660

662-
def get_ancestors(doc):
663-
ancestors = []
661+
def get_ancestors(doc, ancestors = []):
664662
if hasattr(doc, 'relateddocument_set'):
665663
for alias in doc.related_that('replaces'):
666664
if alias.document not in ancestors:
667665
ancestors.append(alias.document)
668-
ancestors.extend(get_ancestors(alias.document))
666+
ancestors.extend(get_ancestors(alias.document, ancestors))
669667
return ancestors
670668

671669
def get_replaces_tree(doc):

0 commit comments

Comments
 (0)