From b12bb3ca3c9badc43fb39debe05eb917e5a3863a Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz <henrik@levkowetz.com> Date: Fri, 22 Dec 2017 19:28:59 +0000 Subject: [PATCH] Guard document replacement following methods against infinite recursion on circular relationships. - Legacy-Id: 14457 --- ietf/doc/utils.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/ietf/doc/utils.py b/ietf/doc/utils.py index 5cd0efe00..2dcc88df4 100644 --- a/ietf/doc/utils.py +++ b/ietf/doc/utils.py @@ -650,22 +650,20 @@ def extract_complete_replaces_ancestor_mapping_for_docs(names): def make_rev_history(doc): # return document history data for inclusion in doc.json (used by timeline) - def get_predecessors(doc): - predecessors = [] + def get_predecessors(doc, predecessors=[]): if hasattr(doc, 'relateddocument_set'): for alias in doc.related_that_doc('replaces'): if alias.document not in predecessors: predecessors.append(alias.document) - predecessors.extend(get_predecessors(alias.document)) + predecessors.extend(get_predecessors(alias.document, predecessors)) return predecessors - def get_ancestors(doc): - ancestors = [] + def get_ancestors(doc, ancestors = []): if hasattr(doc, 'relateddocument_set'): for alias in doc.related_that('replaces'): if alias.document not in ancestors: ancestors.append(alias.document) - ancestors.extend(get_ancestors(alias.document)) + ancestors.extend(get_ancestors(alias.document, ancestors)) return ancestors def get_replaces_tree(doc):