Maven Doxia

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

Details

  • Type: Bug Bug
  • Status: Closed Closed
  • Priority: Major Major
  • Resolution: Fixed
  • Affects Version/s: 1.0-alpha-11
  • Fix Version/s: 1.1
  • Component/s: None
  • Labels:
    None
  • Testcase included:
    yes
  • Number of attachments :
    0

Description

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:

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)

testcase:

AppTest.java
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);
	}
}

Activity

Hide
Lukas Theussl added a comment -

This is fixed already in 1.0-beta-1 (r589828), I added your tests to ConfluenceParserTest. Thanks!

Show
Lukas Theussl added a comment - This is fixed already in 1.0-beta-1 (r589828), I added your tests to ConfluenceParserTest. Thanks!

People

Vote (0)
Watch (0)

Dates

  • Created:
    Updated:
    Resolved: