Description

The wiki.py parser fails to correctly identify some links. This manifests itself when Page.py calls self.formatter.pagelinks.

Steps to reproduce

  1. Create a page with the following content:

     * [:ThisLinkFails:Not Included in pagelinks return data]
     * ["ThisLinkWorks"]
  2. Examine the contents of data/pages/pagename-here/cache/pagelinks. You'll see ThisLinkWorks but not ThisLinkFails.

Example

Details

MoinMoin Version

1.3.4

OS and Version

Windows XP SP2 and also Fedora 3

Python Version

2.3

Server Setup

Apache 2.0.48 CGI

Server Details

n/a

Workaround

None

Proposed fix

--- wiki.py.orig        2005-05-24 16:50:13.000000000 -0700
+++ wiki.py     2005-06-01 13:42:12.009685523 -0700
@@ -149,7 +149,16 @@
         else:
             url, text = url_and_text
 
-        url = url[5:] # remove "wiki:"
+        # keep track of whether this is a self-reference, so links
+        # are always shown even the page doesn't exist.
+        is_self_reference = 0
+        url2 = url.lower()
+        if url2.startswith('wiki:self:'):
+            url = url[10:] # remove "wiki:self:"
+            is_self_reference = 1
+        elif url2.startswith('wiki:'):
+            url = url[5:] # remove "wiki:"
+           
         if text is None:
             tag, tail = wikiutil.split_wiki(url)
             if tag:
@@ -160,7 +169,7 @@
         elif config.allow_subpages and url.startswith(wikiutil.CHILD_PREFIX):
             # fancy link to subpage [wiki:/SubPage text]
             return self._word_repl(url, text)
-        elif Page(self.request, url).exists():
+        elif is_self_reference or Page(self.request, url).exists():
             # fancy link to local page [wiki:LocalPage text]
             return self._word_repl(url, text)

June 1, 2005 - EricJohnson - Minor update to patch so that page references to non-existent pages still show with the custom text.

The patch may be correct but interwiki function is already too long. self interwiki links should be handled in a separate function. Adding more code to this already hard to understand function is wrong. -- NirSoffer 2005-06-01 21:12:50

Nir, how could you confirm a bug that has been fixed for weeks?

The bug still here, probably the new way interwikilinks are detected, by checking the intermap file.

Try here: http://nirs.dyndns.org/main/WikiSandBox

Although I agree with Nir that the linking code in Moin is already too complex, the right time to fix (rewrite) it is not now, but in 2.0. I just applied the proposed fix and this site currently runs on the patched code.

Plan

Fix may require some refactoring of wiki parser, very fragile code.


CategoryMoinMoinBugFixed

MoinMoin: MoinMoinBugs/WikiParserInterwikiLinkDetectionBug (last edited 2007-10-29 19:21:22 by localhost)