From c69ea62ed5e7d5ef046d7d00772d9bb7b100daf6 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 9 Aug 2026 14:52:51 +0100 Subject: Ignore numbering levels that use numStyleLink to refer to themselves --- lib/docx/numbering-xml.js | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) (limited to 'lib/docx') diff --git a/lib/docx/numbering-xml.js b/lib/docx/numbering-xml.js index 544ba52..9c86536 100644 --- a/lib/docx/numbering-xml.js +++ b/lib/docx/numbering-xml.js @@ -17,20 +17,29 @@ function Numbering(nums, abstractNums, styles) { ); function findLevel(numId, level) { + return findLevelWithSeenNumIds(numId, level, {}); + } + + function findLevelWithSeenNumIds(numId, level, seenNumIds) { + if (seenNumIds[numId]) { + return null; + } + seenNumIds[numId] = true; + var num = nums[numId]; - if (num) { - var abstractNum = abstractNums[num.abstractNumId]; - if (!abstractNum) { - return null; - } else if (abstractNum.numStyleLink == null) { - return abstractNums[num.abstractNumId].levels[level]; - } else { - var style = styles.findNumberingStyleById(abstractNum.numStyleLink); - return findLevel(style.numId, level); - } - } else { + if (!num) { return null; } + + var abstractNum = abstractNums[num.abstractNumId]; + if (!abstractNum) { + return null; + } else if (abstractNum.numStyleLink == null) { + return abstractNums[num.abstractNumId].levels[level]; + } else { + var style = styles.findNumberingStyleById(abstractNum.numStyleLink); + return findLevelWithSeenNumIds(style.numId, level, seenNumIds); + } } function findLevelByParagraphStyleId(styleId) { -- cgit v1.2.3