On Tue, Nov 30, 2010 at 16:25, Vincent Massol <[email protected]> wrote:
>
> On Nov 30, 2010, at 4:16 PM, tmortagne (SVN) wrote:
>
>> Author: tmortagne
>> Date: 2010-11-30 16:16:46 +0100 (Tue, 30 Nov 2010)
>> New Revision: 33194
>>
>> Modified:
>>   
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/doc/XWikiDocument.java
>>   
>> platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/doc/XWikiDocumentRenderingTest.java
>> Log:
>> XWIKI-4771: Cycles in the method Document.getDisplayTitle are not detected
>>
>> Modified: 
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/doc/XWikiDocument.java
>> ===================================================================
>> --- 
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/doc/XWikiDocument.java
>>  2010-11-30 15:00:36 UTC (rev 33193)
>> +++ 
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/doc/XWikiDocument.java
>>  2010-11-30 15:16:46 UTC (rev 33194)
>> @@ -43,6 +43,7 @@
>> import java.util.List;
>> import java.util.Map;
>> import java.util.Set;
>> +import java.util.Stack;
>> import java.util.TreeMap;
>> import java.util.Vector;
>> import java.util.regex.Matcher;
>> @@ -1203,7 +1204,20 @@
>>     private String getRenderedContentTitle(Syntax outputSyntax, XWikiContext 
>> context) throws XWikiException
>>     {
>>         String title = null;
>> +
>
> This code below requires comment to understand it. It's not obvious to 
> understand it's to prevent cycles. Might be also good to put it in a separate 
> method to make it even more clear.
>
> I also think the pop should be in a finally block.

Indeed that would be a lot safer.

>
> Thanks
> -Vincent
>
>> +        Stack<DocumentReference> stackTrace =
>> +            (Stack<DocumentReference>) 
>> context.get("internal.getRenderedContentTitleStackTrace");
>>
>> +        if (stackTrace == null) {
>> +            stackTrace = new Stack<DocumentReference>();
>> +            context.put("internal.getRenderedContentTitleStackTrace", 
>> stackTrace);
>> +        } else if (stackTrace.contains(getDocumentReference())) {
>> +            // TODO: generate an error message instead ?
>> +            return null;
>> +        }
>> +
>> +        stackTrace.push(getDocumentReference());
>> +
>>         if (is10Syntax()) {
>>             title = getRenderedContentTitle10(context);
>>         } else {
>> @@ -1235,6 +1249,8 @@
>>             }
>>         }
>>
>> +        stackTrace.pop();
>> +
>>         return title;
>>     }
>>
>>
>> Modified: 
>> platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/doc/XWikiDocumentRenderingTest.java
>> ===================================================================
>> --- 
>> platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/doc/XWikiDocumentRenderingTest.java
>>     2010-11-30 15:00:36 UTC (rev 33193)
>> +++ 
>> platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/doc/XWikiDocumentRenderingTest.java
>>     2010-11-30 15:16:46 UTC (rev 33194)
>> @@ -250,7 +250,18 @@
>>
>>         assertEquals("Page", 
>> this.document.getRenderedTitle(Syntax.XHTML_1_0, getContext()));
>>     }
>> +
>> +    /**
>> +     * Make sure title extracted from content is protected from cycles
>> +     */
>> +    public void testGetRenderedTitleRecursive() throws XWikiException
>> +    {
>> +        this.document.setSyntax(Syntax.XWIKI_2_0);
>> +        this.document.setContent("= {{groovy}}print 
>> doc.getDisplayTitle(){{/groovy}}");
>>
>> +        assertEquals("Page", 
>> this.document.getRenderedTitle(Syntax.XHTML_1_0, getContext()));
>> +    }
>> +
>>     public void testExtractTitle()
>>     {
>>         this.document.setSyntaxId("xwiki/2.0");
>>
>> ____________________________________
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs
>



-- 
Thomas Mortagne
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to