Introduce workaround for CVE-2013-1571

git-svn-id: https://svn.apache.org/repos/asf/ant/easyant/plugins/trunk@1502974 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/javadoc/module.ivy b/javadoc/module.ivy
index cac79c8..c9b08cc 100644
--- a/javadoc/module.ivy
+++ b/javadoc/module.ivy
@@ -15,7 +15,7 @@
    limitations under the License.
 -->
 <ivy-module version="2.0" xmlns:ea="http://www.easyant.org">
-    <info organisation="org.apache.easyant.plugins" module="javadoc" revision="0.9">
+    <info organisation="org.apache.easyant.plugins" module="javadoc" revision="0.10">
         <extends organisation="org.apache.easyant.plugins" module="parent-plugin" revision="0.1" location="../parent.ivy" />
         <description>
             <p>This module provides javadoc feature.</p>
@@ -48,4 +48,4 @@
     <publications>
         <artifact type="ant" />
     </publications>
-</ivy-module>
\ No newline at end of file
+</ivy-module>
diff --git a/javadoc/src/main/resources/javadoc.ant b/javadoc/src/main/resources/javadoc.ant
index 2ed162c..4df6e8d 100644
--- a/javadoc/src/main/resources/javadoc.ant
+++ b/javadoc/src/main/resources/javadoc.ant
@@ -16,6 +16,57 @@
 -->
 <project name="org.apache.easyant.plugins#javadoc" xmlns:ea="antlib:org.apache.easyant">
     <ea:core-version requiredrevision="[0.8,+]" />
+	
+	<macrodef name="patch-javadoc" description="workaround for CVE-2013-1571">
+	    <attribute name="dir"/>
+	    <attribute name="docencoding" default="${file.encoding}"/>
+	    <sequential>
+	      <replace encoding="@{docencoding}" summary="true" taskname="patch-javadoc">
+	        <fileset dir="@{dir}" casesensitive="false" includes="**/index.html,**/index.htm,**/toc.html,**/toc.htm">
+	          <!-- TODO: add encoding="@{docencoding}" to contains check, when we are on ANT 1.9.0: -->
+	          <not><contains text="function validURL(url) {" casesensitive="true" /></not>
+	        </fileset>
+	        <replacetoken><![CDATA[function loadFrames() {]]></replacetoken>
+	        <replacevalue expandProperties="false"><![CDATA[if (targetPage != "" && !validURL(targetPage))
+	        targetPage = "undefined";
+	    function validURL(url) {
+	        var pos = url.indexOf(".html");
+	        if (pos == -1 || pos != url.length - 5)
+	            return false;
+	        var allowNumber = false;
+	        var allowSep = false;
+	        var seenDot = false;
+	        for (var i = 0; i < url.length - 5; i++) {
+	            var ch = url.charAt(i);
+	            if ('a' <= ch && ch <= 'z' ||
+	                    'A' <= ch && ch <= 'Z' ||
+	                    ch == '$' ||
+	                    ch == '_') {
+	                allowNumber = true;
+	                allowSep = true;
+	            } else if ('0' <= ch && ch <= '9'
+	                    || ch == '-') {
+	                if (!allowNumber)
+	                     return false;
+	            } else if (ch == '/' || ch == '.') {
+	                if (!allowSep)
+	                    return false;
+	                allowNumber = false;
+	                allowSep = false;
+	                if (ch == '.')
+	                     seenDot = true;
+	                if (ch == '/' && seenDot)
+	                     return false;
+	            } else {
+	                return false;
+	            }
+	        }
+	        return true;
+	    }
+	    function loadFrames() {]]></replacevalue>
+	      </replace>
+	    </sequential>
+	  </macrodef>
 
     <target name="javadoc:init">
         <ea:parameter property="src.main.java" default="${basedir}/src/main/java" description="directory where sources to be compiled are" />
@@ -61,6 +112,8 @@
         </path>
         <javadoc encoding="${javadoc.file.encoding}" docencoding="${javadoc.file.encoding}" destdir="${target.javadoc.main}"
             sourcepathref="java.main.source.path" />
+    	
+    	<patch-javadoc dir="${target.javadoc.main}" docencoding="${javadoc.file.encoding}"/>
     </target>
 
     <target name="-javadoc:test" depends="javadoc:init" unless="empty.src.test.java.dir">
@@ -69,6 +122,8 @@
         </path>
         <javadoc encoding="${javadoc.file.encoding}" docencoding="${javadoc.file.encoding}" destdir="${target.javadoc.test}"
             sourcepathref="java.test.source.path" />
+
+        <patch-javadoc dir="${target.javadoc.test}" docencoding="${javadoc.file.encoding}"/>
     </target>
 
     <target name="javadoc:package" depends="javadoc:javadoc" description="generate a package containing javadoc"