You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2010/03/11 18:16:42 UTC

svn commit: r921949 - in /cxf/branches/2.2.x-fixes: ./ rt/core/src/main/java/org/apache/cxf/attachment/MimeBodyPartInputStream.java rt/core/src/test/java/org/apache/cxf/attachment/AttachmentDeserializerTest.java

Author: dkulp
Date: Thu Mar 11 17:16:42 2010
New Revision: 921949

URL: http://svn.apache.org/viewvc?rev=921949&view=rev
Log:
Merged revisions 921945 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r921945 | dkulp | 2010-03-11 12:11:57 -0500 (Thu, 11 Mar 2010) | 1 line
  
  [CXF-2706] Fix issues with missing ending boundary causing a loop
........

Modified:
    cxf/branches/2.2.x-fixes/   (props changed)
    cxf/branches/2.2.x-fixes/rt/core/src/main/java/org/apache/cxf/attachment/MimeBodyPartInputStream.java
    cxf/branches/2.2.x-fixes/rt/core/src/test/java/org/apache/cxf/attachment/AttachmentDeserializerTest.java

Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.2.x-fixes/rt/core/src/main/java/org/apache/cxf/attachment/MimeBodyPartInputStream.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/core/src/main/java/org/apache/cxf/attachment/MimeBodyPartInputStream.java?rev=921949&r1=921948&r2=921949&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/core/src/main/java/org/apache/cxf/attachment/MimeBodyPartInputStream.java (original)
+++ cxf/branches/2.2.x-fixes/rt/core/src/main/java/org/apache/cxf/attachment/MimeBodyPartInputStream.java Thu Mar 11 17:16:42 2010
@@ -94,9 +94,17 @@ public class MimeBodyPartInputStream ext
         throws IOException {
         if (pointer < (off + len)) {
             return true;
-        } else {
+        } else if (pointer >= 1000000000) {
             inStream.unread(b, initialPointer, (off + len) - initialPointer);
-            return false;
+            return false;            
+        } else {
+            int x = inStream.read();
+            if (x != -1) {
+                inStream.unread(x);
+                inStream.unread(b, initialPointer, (off + len) - initialPointer);
+                return false;
+            }
+            return true;
         }
     }
 

Modified: cxf/branches/2.2.x-fixes/rt/core/src/test/java/org/apache/cxf/attachment/AttachmentDeserializerTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/core/src/test/java/org/apache/cxf/attachment/AttachmentDeserializerTest.java?rev=921949&r1=921948&r2=921949&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/core/src/test/java/org/apache/cxf/attachment/AttachmentDeserializerTest.java (original)
+++ cxf/branches/2.2.x-fixes/rt/core/src/test/java/org/apache/cxf/attachment/AttachmentDeserializerTest.java Thu Mar 11 17:16:42 2010
@@ -23,6 +23,7 @@ import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
 import java.io.PushbackInputStream;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -38,6 +39,8 @@ import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.ExchangeImpl;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageImpl;
+import org.apache.cxf.message.XMLMessage;
+
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -365,4 +368,33 @@ public class AttachmentDeserializerTest 
         SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
         parser.parse(inputStreamWithoutAttachments, new DefaultHandler());
     }
+    
+    @Test
+    public void imitateAttachmentInInterceptorForMessageWithMissingBoundary() throws Exception {
+        ByteArrayInputStream inputStream;
+        String contentType = "multipart/mixed;boundary=abc123";
+        String data = "--abc123\r\n\r\n<Document></Document>\r\n\r\n";
+
+        Message message;
+
+        inputStream = new ByteArrayInputStream(data.getBytes());
+
+        message = new XMLMessage(new MessageImpl());
+        message.put(Message.CONTENT_TYPE, contentType);
+        message.setContent(InputStream.class, inputStream);
+        message.put(AttachmentDeserializer.ATTACHMENT_DIRECTORY, System
+                .getProperty("java.io.tmpdir"));
+        message.put(AttachmentDeserializer.ATTACHMENT_MEMORY_THRESHOLD, String
+                .valueOf(AttachmentDeserializer.THRESHOLD));
+
+
+        AttachmentDeserializer ad 
+            = new AttachmentDeserializer(message, 
+                                         Collections.singletonList("multipart/mixed"));
+
+        ad.initializeAttachments();
+        message.getAttachments().size();
+
+    }
+
 }
\ No newline at end of file