From cda18f119f1c42ecd44117093e6f7a003a46eb8d Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Mon, 21 May 2018 21:31:34 +0900 Subject: [PATCH] Fix #4919: node.asdom() crashes if toctree has :numbered: option --- CHANGES | 1 + sphinx/environment/collectors/toctree.py | 6 ++-- tests/test_environment_toctree.py | 36 ++++++++++++------------ 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/CHANGES b/CHANGES index 585dd42b7..3284cbe6a 100644 --- a/CHANGES +++ b/CHANGES @@ -34,6 +34,7 @@ Bugs fixed * #4928: i18n: Ignore dot-directories like .git/ in LC_MESSAGES/ * #4946: py domain: type field could not handle "None" as a type * #4979: latex: Incorrect escaping of curly braces in index entries +* #4919: node.asdom() crashes if toctree has :numbered: option Testing -------- diff --git a/sphinx/environment/collectors/toctree.py b/sphinx/environment/collectors/toctree.py index a7556eadd..c8b00c900 100644 --- a/sphinx/environment/collectors/toctree.py +++ b/sphinx/environment/collectors/toctree.py @@ -168,10 +168,10 @@ class TocTreeCollector(EnvironmentCollector): number = tuple(numstack) else: number = None - secnums[subnode[0]['anchorname']] = \ - subnode[0]['secnumber'] = number + secnums[subnode[0]['anchorname']] = number + subnode[0]['secnumber'] = list(number) if titlenode: - titlenode['secnumber'] = number + titlenode['secnumber'] = list(number) titlenode = None elif isinstance(subnode, addnodes.toctree): _walk_toctree(subnode, depth) diff --git a/tests/test_environment_toctree.py b/tests/test_environment_toctree.py index 1bebbaa3e..3fbb21856 100644 --- a/tests/test_environment_toctree.py +++ b/tests/test_environment_toctree.py @@ -227,11 +227,11 @@ def test_get_toctree_for(app): [list_item, compact_paragraph, reference, "foo.1"], [list_item, compact_paragraph, reference, "foo.2"])) - assert_node(toctree[1][0][0][0], reference, refuri="foo", secnumber=(1,)) - assert_node(toctree[1][0][1][0][0][0], reference, refuri="quux", secnumber=(1, 1)) - assert_node(toctree[1][0][1][1][0][0], reference, refuri="foo#foo-1", secnumber=(1, 2)) - assert_node(toctree[1][0][1][2][0][0], reference, refuri="foo#foo-2", secnumber=(1, 3)) - assert_node(toctree[1][1][0][0], reference, refuri="bar", secnumber=(2,)) + assert_node(toctree[1][0][0][0], reference, refuri="foo", secnumber=[1]) + assert_node(toctree[1][0][1][0][0][0], reference, refuri="quux", secnumber=[1, 1]) + assert_node(toctree[1][0][1][1][0][0], reference, refuri="foo#foo-1", secnumber=[1, 2]) + assert_node(toctree[1][0][1][2][0][0], reference, refuri="foo#foo-2", secnumber=[1, 3]) + assert_node(toctree[1][1][0][0], reference, refuri="bar", secnumber=[2]) assert_node(toctree[1][2][0][0], reference, refuri="http://sphinx-doc.org/") assert_node(toctree[2], @@ -258,8 +258,8 @@ def test_get_toctree_for_collapse(app): ([list_item, compact_paragraph, reference, "foo"], [list_item, compact_paragraph, reference, "bar"], [list_item, compact_paragraph, reference, "http://sphinx-doc.org/"])) - assert_node(toctree[1][0][0][0], reference, refuri="foo", secnumber=(1,)) - assert_node(toctree[1][1][0][0], reference, refuri="bar", secnumber=(2,)) + assert_node(toctree[1][0][0][0], reference, refuri="foo", secnumber=[1]) + assert_node(toctree[1][1][0][0], reference, refuri="bar", secnumber=[2]) assert_node(toctree[1][2][0][0], reference, refuri="http://sphinx-doc.org/") assert_node(toctree[2], @@ -296,13 +296,13 @@ def test_get_toctree_for_maxdepth(app): assert_node(toctree[1][0][1][1][1], [bullet_list, list_item, compact_paragraph, reference, "foo.1-1"]) - assert_node(toctree[1][0][0][0], reference, refuri="foo", secnumber=(1,)) - assert_node(toctree[1][0][1][0][0][0], reference, refuri="quux", secnumber=(1, 1)) - assert_node(toctree[1][0][1][1][0][0], reference, refuri="foo#foo-1", secnumber=(1, 2)) + assert_node(toctree[1][0][0][0], reference, refuri="foo", secnumber=[1]) + assert_node(toctree[1][0][1][0][0][0], reference, refuri="quux", secnumber=[1, 1]) + assert_node(toctree[1][0][1][1][0][0], reference, refuri="foo#foo-1", secnumber=[1, 2]) assert_node(toctree[1][0][1][1][1][0][0][0], - reference, refuri="foo#foo-1-1", secnumber=(1, 2, 1)) - assert_node(toctree[1][0][1][2][0][0], reference, refuri="foo#foo-2", secnumber=(1, 3)) - assert_node(toctree[1][1][0][0], reference, refuri="bar", secnumber=(2,)) + reference, refuri="foo#foo-1-1", secnumber=[1, 2, 1]) + assert_node(toctree[1][0][1][2][0][0], reference, refuri="foo#foo-2", secnumber=[1, 3]) + assert_node(toctree[1][1][0][0], reference, refuri="bar", secnumber=[2]) assert_node(toctree[1][2][0][0], reference, refuri="http://sphinx-doc.org/") assert_node(toctree[2], @@ -335,11 +335,11 @@ def test_get_toctree_for_includehidden(app): [list_item, compact_paragraph, reference, "foo.1"], [list_item, compact_paragraph, reference, "foo.2"])) - assert_node(toctree[1][0][0][0], reference, refuri="foo", secnumber=(1,)) - assert_node(toctree[1][0][1][0][0][0], reference, refuri="quux", secnumber=(1, 1)) - assert_node(toctree[1][0][1][1][0][0], reference, refuri="foo#foo-1", secnumber=(1, 2)) - assert_node(toctree[1][0][1][2][0][0], reference, refuri="foo#foo-2", secnumber=(1, 3)) - assert_node(toctree[1][1][0][0], reference, refuri="bar", secnumber=(2,)) + assert_node(toctree[1][0][0][0], reference, refuri="foo", secnumber=[1]) + assert_node(toctree[1][0][1][0][0][0], reference, refuri="quux", secnumber=[1, 1]) + assert_node(toctree[1][0][1][1][0][0], reference, refuri="foo#foo-1", secnumber=[1, 2]) + assert_node(toctree[1][0][1][2][0][0], reference, refuri="foo#foo-2", secnumber=[1, 3]) + assert_node(toctree[1][1][0][0], reference, refuri="bar", secnumber=[2]) assert_node(toctree[1][2][0][0], reference, refuri="http://sphinx-doc.org/") assert_node(toctree[2],