Description

Table of contents mixed with pages that include /SubPage cause infinite recursion.

Steps to reproduce

create this page:

[[TableOfContents]]

This page include its /SubPage:

[[Include(/SubPage)]]

Now click on the sub page link and create this page:

This page include its /SubPage:

[[Include(/SubPage)]]

And try to click "Show Parent"...

Try on this wiki: /SubPage

Details

main--patch-925

<!-- The above is a description of an error in a Python program, formatted
     for a Web browser because the 'cgitb' module was enabled.  In case you
     are not reading this in a Web browser, here is the original traceback:

Traceback (most recent call last):
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/request.py", line 1045, in run
    self.page.send_page(self, count_hit=1)
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/Page.py", line 1183, in send_page
    format_args=pi_formatargs, do_cache=do_cache)
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/Page.py", line 1265, in send_page_content
    self.execute(request, parser, code)
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/Page.py", line 1290, in execute
    exec code
  File "IncludeSubPageRecursion", line 7, in ?
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/formatter/base.py", line 231, in macro
    return macro_obj.execute(name, args)
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/wikimacro.py", line 101, in execute
    return macro(self, args)
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/macro/TableOfContents.py", line 160, in execute
    return toc.run()
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/macro/TableOfContents.py", line 73, in run
    self.macro.formatter.page.page_name)
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/macro/TableOfContents.py", line 111, in process_lines
    self.process_lines(inc_page_lines, inc_pagename)
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/macro/TableOfContents.py", line 111, in process_lines

[snip snip snip]

    self.process_lines(inc_page_lines, inc_pagename)
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/macro/TableOfContents.py", line 111, in process_lines
    self.process_lines(inc_page_lines, inc_pagename)
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/macro/TableOfContents.py", line 111, in process_lines
    self.process_lines(inc_page_lines, inc_pagename)
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/macro/TableOfContents.py", line 109, in process_lines
    inc_page_lines = inc_page_lines + self.IncludeMacro(self.macro, match.group(1), called_by_toc=1)
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/macro/TableOfContents.py", line 69, in IncludeMacro
    return self.pre_re.sub('',apply(self.include_macro, args, kwargs)).split('\n')
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/macro/Include.py", line 102, in execute
    if not request.user.may.read(inc_name):
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/security.py", line 52, in <lambda>
    return lambda pagename, Page=Page, request=request, attr=attr: Page(request, pagename).getACL(request).may(request, self.name, attr)
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/Page.py", line 1528, in getACL
    currentRevision = self.current_rev()
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/Page.py", line 208, in current_rev
    pagefile, rev, exists = self.get_rev()
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/Page.py", line 179, in get_rev
    underlay, pagedir = self.getPageStatus(check_create=0)
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/Page.py", line 307, in getPageStatus
    underlay, path = self.getPageBasePath(use_underlay)
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/Page.py", line 243, in getPageBasePath
    pagefile, rev, exists = self.get_rev(use_underlay=0)
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/Page.py", line 199, in get_rev
    pagefile, realrev, exists = self.get_rev_dir(pagedir, realrev)
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/Page.py", line 138, in get_rev_dir
    self._setRealPageName(pagedir)
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/Page.py", line 163, in _setRealPageName
    realPath = wikiutil.unquoteWikiname(realPath)
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/wikiutil.py", line 250, in unquoteWikiname
    wikiname = decodeUserInput(wikiname, charsets)
  File "/Volumes/Home/nir/Projects/moin/main/MoinMoin/wikiutil.py", line 92, in decodeUserInput
    return s.decode(charset)
RuntimeError: maximum recursion depth exceeded

-->

Workaround

Discussion

Plan


CategoryMoinMoinNoBug

MoinMoin: MoinMoinBugs/IncludeSubPageRecursion (last edited 2009-07-03 11:09:48 by AlexanderSchremmer)