You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ol...@apache.org on 2012/04/19 11:17:45 UTC

svn commit: r1327885 - in /archiva/trunk/archiva-modules/archiva-base/archiva-xml-tools/src: main/java/org/apache/archiva/xml/LatinEntityResolutionReader.java test/java/org/apache/archiva/xml/LatinEntityResolutionReaderTest.java

Author: olamy
Date: Thu Apr 19 09:17:44 2012
New Revision: 1327885

URL: http://svn.apache.org/viewvc?rev=1327885&view=rev
Log:
[MRM-1625] java.lang.ArrayIndexOutOfBoundsException from parsing maven-metadata.xml
Submitted by charlie kim.

Modified:
    archiva/trunk/archiva-modules/archiva-base/archiva-xml-tools/src/main/java/org/apache/archiva/xml/LatinEntityResolutionReader.java
    archiva/trunk/archiva-modules/archiva-base/archiva-xml-tools/src/test/java/org/apache/archiva/xml/LatinEntityResolutionReaderTest.java

Modified: archiva/trunk/archiva-modules/archiva-base/archiva-xml-tools/src/main/java/org/apache/archiva/xml/LatinEntityResolutionReader.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-xml-tools/src/main/java/org/apache/archiva/xml/LatinEntityResolutionReader.java?rev=1327885&r1=1327884&r2=1327885&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-base/archiva-xml-tools/src/main/java/org/apache/archiva/xml/LatinEntityResolutionReader.java (original)
+++ archiva/trunk/archiva-modules/archiva-base/archiva-xml-tools/src/main/java/org/apache/archiva/xml/LatinEntityResolutionReader.java Thu Apr 19 09:17:44 2012
@@ -69,12 +69,13 @@ public class LatinEntityResolutionReader
             {
                 // Copy partial leftover.
                 System.arraycopy( leftover, 0, destbuf, current_requested_offset, length );
+                int copyLeftOverLength = leftover.length - length;
 
                 // Create new leftover of remaining.
-                char tmp[] = new char[length];
-                System.arraycopy( leftover, length, tmp, 0, length );
+                char tmp[] = new char[copyLeftOverLength];
+                System.arraycopy( leftover, length, tmp, 0, copyLeftOverLength );
                 leftover = new char[tmp.length];
-                System.arraycopy( tmp, 0, leftover, 0, length );
+                System.arraycopy( tmp, 0, leftover, 0, copyLeftOverLength );
 
                 // Return len
                 return length;

Modified: archiva/trunk/archiva-modules/archiva-base/archiva-xml-tools/src/test/java/org/apache/archiva/xml/LatinEntityResolutionReaderTest.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-xml-tools/src/test/java/org/apache/archiva/xml/LatinEntityResolutionReaderTest.java?rev=1327885&r1=1327884&r2=1327885&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-base/archiva-xml-tools/src/test/java/org/apache/archiva/xml/LatinEntityResolutionReaderTest.java (original)
+++ archiva/trunk/archiva-modules/archiva-base/archiva-xml-tools/src/test/java/org/apache/archiva/xml/LatinEntityResolutionReaderTest.java Thu Apr 19 09:17:44 2012
@@ -23,8 +23,17 @@ import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.io.Reader;
 import java.io.StringWriter;
+import java.net.URL;
+
+import junit.framework.Assert;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.io.SAXReader;
 
 /**
  * LatinEntityResolutionReaderTest 
@@ -193,6 +202,29 @@ public class LatinEntityResolutionReader
         assertProperRead( expected, "no-prolog-with-entities.xml", 409600 );
     }
 
+    
+    
+    public void testReaderLeftOver()
+    throws IOException
+	{
+	    File inputFile = getExampleXml( "maven-metadata-leftover.xml" );
+	    //Bits from RepositoryMetadataReader.read
+		InputStream in = null;
+		SAXReader reader = new SAXReader();
+		URL url = inputFile.toURL();
+		in = url.openStream();
+		InputStreamReader inReader = new InputStreamReader( in, "UTF-8" );
+		LatinEntityResolutionReader latinReader = new LatinEntityResolutionReader( inReader );
+		try {
+			reader.read( latinReader );
+		} catch (DocumentException e) {
+			Assert.fail("Should not have failed here." + e);
+			throw new IOException(e);
+		}
+	}
+
+
+    
     public void testNoLatinEntitiesHugeLine()
     {
         assertProperRead( "commons-codec-1.2.pom", "commons-codec-1.2.pom", 4096 );