Author: vsiveton Date: Sun Sep 6 10:49:37 2009 New Revision: 811802 URL: http://svn.apache.org/viewvc?rev=811802&view=rev Log: o be sure that relative link is not outside the base (to prevent StringIndexOutOfBoundsException) o added test case
Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/test/java/org/apache/maven/doxia/module/fo/FoAggregateSinkTest.java Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java?rev=811802&r1=811801&r2=811802&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java Sun Sep 6 10:49:37 2009 @@ -518,6 +518,15 @@ base = base.substring( 0, base.lastIndexOf( "/" ) ); anchor = anchor.substring( 3 ); + + if ( base.lastIndexOf( "/" ) == -1 ) + { + while ( anchor.startsWith( "../" ) ) + { + anchor = anchor.substring( 3 ); + } + break; + } } } Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/test/java/org/apache/maven/doxia/module/fo/FoAggregateSinkTest.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/test/java/org/apache/maven/doxia/module/fo/FoAggregateSinkTest.java?rev=811802&r1=811801&r2=811802&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/test/java/org/apache/maven/doxia/module/fo/FoAggregateSinkTest.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/test/java/org/apache/maven/doxia/module/fo/FoAggregateSinkTest.java Sun Sep 6 10:49:37 2009 @@ -176,5 +176,29 @@ assertTrue( result.indexOf( "<fo:basic-link internal-destination=\"./folder/test\">" ) != -1 ); assertTrue( result.indexOf( "<fo:basic-link internal-destination=\"./folder/whatsnew-1.1\">" ) != -1 ); assertTrue( result.indexOf( "<fo:block id=\"./whatsnew-1.1\">" ) != -1 ); + + writer = new StringWriter(); + try + { + sink = new FoAggregateSink( writer ); + sink.setDocumentName( "./subdir/dir/index.html" ); + sink.link( "../../root.html" ); + sink.text( "../../root.html" ); + sink.link_(); + sink.link( "../../../outside.html" ); + sink.text( "../../../outside.html" ); + sink.link_(); + sink.body(); + sink.body_(); + } + finally + { + sink.close(); + } + + result = writer.toString(); + + assertTrue( result.indexOf( "<fo:basic-link internal-destination=\"./root\">" ) != -1 ); + assertTrue( result.indexOf( "<fo:basic-link internal-destination=\"./outside\">" ) != -1 ); } }