You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ni...@apache.org on 2005/06/07 13:36:38 UTC

svn commit: r188748 - in /james/mime4j/trunk/src: java/org/mime4j/decoder/DecoderUtil.java test/org/mime4j/decoder/DecoderUtilTest.java

Author: niklas
Date: Tue Jun  7 04:36:37 2005
New Revision: 188748

URL: http://svn.apache.org/viewcvs?rev=188748&view=rev
Log:
Fixed bug causing OutOfMemoryError when decoding strings which contain =? but are not encoded words.

Modified:
    james/mime4j/trunk/src/java/org/mime4j/decoder/DecoderUtil.java
    james/mime4j/trunk/src/test/org/mime4j/decoder/DecoderUtilTest.java

Modified: james/mime4j/trunk/src/java/org/mime4j/decoder/DecoderUtil.java
URL: http://svn.apache.org/viewcvs/james/mime4j/trunk/src/java/org/mime4j/decoder/DecoderUtil.java?rev=188748&r1=188747&r2=188748&view=diff
==============================================================================
--- james/mime4j/trunk/src/java/org/mime4j/decoder/DecoderUtil.java (original)
+++ james/mime4j/trunk/src/java/org/mime4j/decoder/DecoderUtil.java Tue Jun  7 04:36:37 2005
@@ -193,7 +193,7 @@
                  */
                 p2 = t2 != -1 ? body.indexOf("?=", t2 + 1) : -1;
                 if (p2 == -1) {
-                    if (body.charAt(t2 + 1) == '=') {
+                    if (t2 != -1 && body.charAt(t2 + 1) == '=') {
                         /*
                          * The text "=?charset?enc?=" appears to be valid for 
                          * empty strings.
@@ -239,13 +239,13 @@
                                     +"corresponding Java charset");
                         }
                     } else if (!CharsetUtil.isDecodingSupported(charset)) {
-                            decodedWord = body.substring(p1, p2 + 2);
-                            if (log.isWarnEnabled()) {
-                                log.warn("Current JDK doesn't support decoding "
-                                       + "of charset '" + charset 
-                                       + "' (MIME charset '" 
-                                       + mimeCharset + "')");
-                            }
+                        decodedWord = body.substring(p1, p2 + 2);
+                        if (log.isWarnEnabled()) {
+                            log.warn("Current JDK doesn't support decoding "
+                                   + "of charset '" + charset 
+                                   + "' (MIME charset '" 
+                                   + mimeCharset + "')");
+                        }
                     } else {
                         if (enc.equalsIgnoreCase("Q")) {
                             decodedWord = DecoderUtil.decodeQ(encodedWord, charset);

Modified: james/mime4j/trunk/src/test/org/mime4j/decoder/DecoderUtilTest.java
URL: http://svn.apache.org/viewcvs/james/mime4j/trunk/src/test/org/mime4j/decoder/DecoderUtilTest.java?rev=188748&r1=188747&r2=188748&view=diff
==============================================================================
--- james/mime4j/trunk/src/test/org/mime4j/decoder/DecoderUtilTest.java (original)
+++ james/mime4j/trunk/src/test/org/mime4j/decoder/DecoderUtilTest.java Tue Jun  7 04:36:37 2005
@@ -20,7 +20,6 @@
 import junit.framework.TestCase;
 
 import org.apache.log4j.BasicConfigurator;
-import org.mime4j.util.CharsetUtil;
 
 /**
  * 
@@ -59,7 +58,7 @@
         assertEquals("á â\tã ä ", s);
     }
     
-    public void testDecodeBody() {
+    public void testDecodeEncodedWords() {
         assertEquals("", DecoderUtil.decodeEncodedWords(""));
         assertEquals("Yada yada", DecoderUtil.decodeEncodedWords("Yada yada"));
         assertEquals("  áâã\tä", 
@@ -75,5 +74,11 @@
                 DecoderUtil.decodeEncodedWords("=?US-ASCII?b?QSBzaG9ydCB0ZXh0IGFnYWluIQ==?="));
         assertEquals("", DecoderUtil.decodeEncodedWords("=?iso8859-1?Q?="));
         assertEquals("", DecoderUtil.decodeEncodedWords("=?iso8859-1?b?="));
+        
+        /*
+         * Bug detected on June 7, 2005. Decoding the following string caused
+         * OutOfMemoryError.
+         */
+        assertEquals("=3?!!\\=?\"!g6P\"!Xp:\"!", DecoderUtil.decodeEncodedWords("=3?!!\\=?\"!g6P\"!Xp:\"!"));
     }    
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org