You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ay...@apache.org on 2008/03/31 11:08:02 UTC

svn commit: r642934 - in /harmony/enhanced/classlib/trunk/modules: archive/src/main/java/java/util/jar/ archive/src/test/java/org/apache/harmony/archive/tests/java/util/jar/ luni/src/main/java/org/apache/harmony/luni/util/

Author: ayza
Date: Mon Mar 31 02:07:53 2008
New Revision: 642934

URL: http://svn.apache.org/viewvc?rev=642934&view=rev
Log:
Patches from HARMONY-5662(Non-UTF8 character in manifest error during confluence startup) were applied.

Added:
    harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/InputStreamExposer.java
      - copied, changed from r642900, harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/ByteBuffer.java
Removed:
    harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/ByteBuffer.java
Modified:
    harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/Manifest.java
    harmony/enhanced/classlib/trunk/modules/archive/src/test/java/org/apache/harmony/archive/tests/java/util/jar/ManifestTest.java

Modified: harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/Manifest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/Manifest.java?rev=642934&r1=642933&r2=642934&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/Manifest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/Manifest.java Mon Mar 31 02:07:53 2008
@@ -29,6 +29,7 @@
 import java.util.Map;
 
 import org.apache.harmony.archive.internal.nls.Messages;
+import org.apache.harmony.luni.util.InputStreamExposer;
 import org.apache.harmony.luni.util.ThreadLocalCache;
 
 /**
@@ -204,10 +205,19 @@
     public void read(InputStream is) throws IOException {
         byte[] buf;
         try {
-            buf = org.apache.harmony.luni.util.ByteBuffer.wrap(is);
+            buf = InputStreamExposer.expose(is);
         } catch (OutOfMemoryError oome) {
             throw new IOException(Messages.getString("archive.2E")); //$NON-NLS-1$
         }
+
+        // a workaround for HARMONY-5662
+        // replace EOF and NUL with another new line
+        // which does not trigger an error
+        byte b = buf[buf.length - 1];
+        if (0 == b || 26 == b) {
+            buf[buf.length - 1] = '\n';
+        }
+
         im = new InitManifest(buf, mainAttributes,
                 Attributes.Name.MANIFEST_VERSION);
         mainEnd = im.getPos();

Modified: harmony/enhanced/classlib/trunk/modules/archive/src/test/java/org/apache/harmony/archive/tests/java/util/jar/ManifestTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/archive/src/test/java/org/apache/harmony/archive/tests/java/util/jar/ManifestTest.java?rev=642934&r1=642933&r2=642934&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/archive/src/test/java/org/apache/harmony/archive/tests/java/util/jar/ManifestTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/archive/src/test/java/org/apache/harmony/archive/tests/java/util/jar/ManifestTest.java Mon Mar 31 02:07:53 2008
@@ -136,7 +136,8 @@
                 + "Name: \nSpecification-Title: foo\nSpecification-Version: 1.0\nSpecification-Vendor: \n"
                 + "Implementation-Title: \nImplementation-Version: 1.0\nImplementation-Vendor: \n\n";
         ByteArrayInputStream bis = new ByteArrayInputStream(manifestContent
-                .getBytes());
+                .getBytes("ISO-8859-1"));
+
 
         Manifest mf = new Manifest(bis);
         assertEquals("Should be 4 main attributes", 4, mf.getMainAttributes()
@@ -239,8 +240,33 @@
     }
 
     /**
-     * @tests {@link java.util.jar.Manifest#read(java.io.InputStream)
-     */
+     * Ensures compatibility with manifests produced by gcc.
+     * 
+     * @see <a
+     *      href="http://issues.apache.org/jira/browse/HARMONY-5662">HARMONY-5662</a>
+     */
+    public void testNul() throws IOException {
+        String manifestContent =
+                "Manifest-Version: 1.0\nCreated-By: nasty gcc tool\n\n\0";
+
+        byte[] bytes = manifestContent.getBytes("ISO-8859-1");
+        new Manifest(new ByteArrayInputStream(bytes)); // the last NUL is ok
+        
+        bytes[bytes.length - 1] = 26;
+        new Manifest(new ByteArrayInputStream(bytes)); // the last EOF is ok
+
+        bytes[bytes.length - 1] = 'A'; // the last line ignored
+        new Manifest(new ByteArrayInputStream(bytes));
+
+        bytes[2] = 0; // NUL char in Manifest
+        try {
+            new Manifest(new ByteArrayInputStream(bytes));
+            fail("IOException expected");
+        } catch (IOException e) {
+            // desired
+        }
+    }
+
     public void testDecoding() throws IOException {
         Manifest m = getManifest(ATT_JAR_NAME);
         final byte[] bVendor = new byte[] { (byte) 0xd0, (byte) 0x9C,

Copied: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/InputStreamExposer.java (from r642900, harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/ByteBuffer.java)
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/InputStreamExposer.java?p2=harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/InputStreamExposer.java&p1=harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/ByteBuffer.java&r1=642900&r2=642934&rev=642934&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/ByteBuffer.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/InputStreamExposer.java Mon Mar 31 02:07:53 2008
@@ -28,7 +28,7 @@
 /**
  * The class contains static {@link java.io.InputStream} utilities.
  */
-public class ByteBuffer {
+public class InputStreamExposer {
 
     /**
      * Provides access to a protected underlying buffer of
@@ -69,7 +69,7 @@
      *         beginning, and an end position is at the buffer end, or a copy of
      *         the underlying buffer part.
      */
-    private static byte[] wrap(ByteArrayInputStream bais) {
+    private static byte[] expose(ByteArrayInputStream bais) {
         byte[] buffer, buf;
         int pos;
         synchronized (bais) {
@@ -100,13 +100,13 @@
      *            the stream to be read.
      * @return the snapshot wrapping the buffer where the bytes are read to.
      */
-    public static byte[] wrap(InputStream is) throws IOException {
+    public static byte[] expose(InputStream is) throws IOException {
         if (is instanceof ExposedByteArrayInputStream) {
             return ((ExposedByteArrayInputStream) is).expose();
         }
 
         if (is.getClass().equals(ByteArrayInputStream.class)) {
-            return wrap((ByteArrayInputStream) is);
+            return expose((ByteArrayInputStream) is);
         }
 
         // this may be slow, put optimizations suitable for your stream