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 );
}
}
|