unable to parse document when the last character is '}'
-------------------------------------------------------

                 Key: DOXIA-247
                 URL: http://jira.codehaus.org/browse/DOXIA-247
             Project: Maven Doxia
          Issue Type: Bug
    Affects Versions: 1.0-alpha-11
            Reporter: David Delbecq


When last character of a document is '}', maven doxia issues a, array out of 
bound exception. It tries to get next character to find out if we found a '}}' 
pair, but doesn't check bounds of document:
{code}
org.apache.maven.doxia.parser.ParseException: String index out of range: 14
        at 
org.apache.maven.doxia.module.confluence.ConfluenceParser.parse(ConfluenceParser.java:139)
....
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of 
range: 14
        at java.lang.String.charAt(String.java:558)
        at 
org.apache.maven.doxia.module.confluence.parser.ParagraphBlockParser.visit(ParagraphBlockParser.java:134)
        at 
org.apache.maven.doxia.module.confluence.ConfluenceParser.parse(ConfluenceParser.java:103)
        at 
org.apache.maven.doxia.module.confluence.ConfluenceParser.parse(ConfluenceParser.java:131)
{code}

testcase:
{code:title=AppTest.java|borderStyle=solid}
package org.apache.doxia.test.BUGTestCase;

import java.io.StringReader;

/**
 * Unit test for simple App.
 */
public class AppTest 
extends TestCase
{
        /**
         * Create the test case
         *
         * @param testName name of the test case
         */
        public AppTest( String testName )
        {
                super( testName );
        }

        /**
         * @return the suite of tests being tested
         */
        public static Test suite()
        {
                return new TestSuite( AppTest.class );
        }

        /**
         * Rigourous Test :-)
         * @throws ParseException 
         */
        public void testEndBracket() throws ParseException
        {
                String document = "Test" +
                "\n\n* list1"+
                "\n\n* list2"+
                "\n\n* list2"+
                "\n{pre}123{/pre}";                     
                StringWriter writer = new StringWriter();
                ConfluenceParser parser = new ConfluenceParser();
                XhtmlSink sink = new XhtmlSink(writer);
                /* parsing with additional space at end works*/
                parser.parse(new StringReader(document+" "), sink);
                assertTrue("generated document should have a size 
>0",writer.toString().length()>0);
                /* parsing with document ending in } fails*/
                try{
                        parser.parse(new StringReader(document), sink);
                } catch (Exception e){
                        e.printStackTrace();
                        fail("parsing with document ending in } should not 
fails");
                }
                assertTrue("generated document should have a size 
>0",writer.toString().length()>0);
        }
        /**
         * Rigourous Test :-)
         * @throws ParseException 
         */
        public void testEndBracketInList() throws ParseException
        {
                String document1 = "Test" +
                "\n\n* list1"+
                "\n\n* list2"+
                "\n\n* list2{pre}123{/pre} "+
                "\n123";
                String document2 = "Test" +
                "\n\n* list1"+
                "\n\n* list2"+
                "\n\n* list2{pre}123{/pre}"+
                "\n123";                        
                StringWriter writer = new StringWriter();
                ConfluenceParser parser = new ConfluenceParser();
                XhtmlSink sink = new XhtmlSink(writer);
                /* parsing with additional space at end of list item works*/
                parser.parse(new StringReader(document1), sink);
                assertTrue("generated document should have a size 
>0",writer.toString().length()>0);
                /* parsing with end of list item ending in } fails*/
                try{
                        parser.parse(new StringReader(document2), sink);
                } catch (Exception e){
                        e.printStackTrace();
                        fail("parsing with end of list item ending in } should 
not fails");
                }
                assertTrue("generated document should have a size 
>0",writer.toString().length()>0);
        }
}
{code}


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to