Author: bago Date: Fri Apr 7 12:50:54 2006 New Revision: 392373 URL: http://svn.apache.org/viewcvs?rev=392373&view=rev Log: Test and temporary fix for a rare but critical NPE in MimeMessageWrapper (JAMES-474)
Modified: james/server/trunk/src/java/org/apache/james/core/MimeMessageCopyOnWriteProxy.java james/server/trunk/src/java/org/apache/james/core/MimeMessageWrapper.java james/server/trunk/src/test/org/apache/james/core/MimeMessageFromSharedStreamTest.java james/server/trunk/src/test/org/apache/james/core/MimeMessageTest.java Modified: james/server/trunk/src/java/org/apache/james/core/MimeMessageCopyOnWriteProxy.java URL: http://svn.apache.org/viewcvs/james/server/trunk/src/java/org/apache/james/core/MimeMessageCopyOnWriteProxy.java?rev=392373&r1=392372&r2=392373&view=diff ============================================================================== --- james/server/trunk/src/java/org/apache/james/core/MimeMessageCopyOnWriteProxy.java (original) +++ james/server/trunk/src/java/org/apache/james/core/MimeMessageCopyOnWriteProxy.java Fri Apr 7 12:50:54 2006 @@ -147,19 +147,8 @@ synchronized (refCount) { if (refCount.getReferenceCount() > 1) { refCount.decrementReferenceCount(); - refCount = new ReferenceCounter(1); - if (wrapped instanceof MimeMessageWrapper) { - MimeMessageWrapper mmw = (MimeMessageWrapper) wrapped; - if (!mmw.isModified()) { - wrapped = new MimeMessageWrapper(mmw.source); - } else { - wrapped = new MimeMessage(wrapped); - } - } else { - // Not sure this will really clone the MimeMessage! - wrapped = new MimeMessage(wrapped); - } + wrapped = new MimeMessageWrapper(wrapped); } } } Modified: james/server/trunk/src/java/org/apache/james/core/MimeMessageWrapper.java URL: http://svn.apache.org/viewcvs/james/server/trunk/src/java/org/apache/james/core/MimeMessageWrapper.java?rev=392373&r1=392372&r2=392373&view=diff ============================================================================== --- james/server/trunk/src/java/org/apache/james/core/MimeMessageWrapper.java (original) +++ james/server/trunk/src/java/org/apache/james/core/MimeMessageWrapper.java Fri Apr 7 12:50:54 2006 @@ -106,6 +106,7 @@ // if the original is an unmodified MimeMessageWrapped we clone the headers and // take its source. + /* Temporary commented out because of JAMES-474 if (original instanceof MimeMessageWrapper && !((MimeMessageWrapper) original).bodyModified) { source = ((MimeMessageWrapper) original).source; // this probably speed up things @@ -116,6 +117,7 @@ headersModified = ((MimeMessageWrapper) original).headersModified; } } + */ if (source == null) { ByteArrayOutputStream bos; Modified: james/server/trunk/src/test/org/apache/james/core/MimeMessageFromSharedStreamTest.java URL: http://svn.apache.org/viewcvs/james/server/trunk/src/test/org/apache/james/core/MimeMessageFromSharedStreamTest.java?rev=392373&r1=392372&r2=392373&view=diff ============================================================================== --- james/server/trunk/src/test/org/apache/james/core/MimeMessageFromSharedStreamTest.java (original) +++ james/server/trunk/src/test/org/apache/james/core/MimeMessageFromSharedStreamTest.java Fri Apr 7 12:50:54 2006 @@ -16,16 +16,17 @@ ***********************************************************************/ package org.apache.james.core; +import com.sun.mail.util.SharedByteArrayInputStream; + import javax.mail.Session; import javax.mail.internet.MimeMessage; -import java.io.ByteArrayInputStream; import java.util.Properties; public class MimeMessageFromSharedStreamTest extends MimeMessageFromStreamTest { protected MimeMessage getMessageFromSources(String sources) throws Exception { - return new MimeMessage(Session.getDefaultInstance(new Properties()),new ByteArrayInputStream(sources.getBytes())); + return new MimeMessage(Session.getDefaultInstance(new Properties()),new SharedByteArrayInputStream(sources.getBytes())); } } Modified: james/server/trunk/src/test/org/apache/james/core/MimeMessageTest.java URL: http://svn.apache.org/viewcvs/james/server/trunk/src/test/org/apache/james/core/MimeMessageTest.java?rev=392373&r1=392372&r2=392373&view=diff ============================================================================== --- james/server/trunk/src/test/org/apache/james/core/MimeMessageTest.java (original) +++ james/server/trunk/src/test/org/apache/james/core/MimeMessageTest.java Fri Apr 7 12:50:54 2006 @@ -16,6 +16,7 @@ ***********************************************************************/ package org.apache.james.core; +import org.apache.avalon.framework.container.ContainerUtil; import org.apache.mailet.RFC2822Headers; import javax.mail.BodyPart; @@ -301,6 +302,25 @@ } catch (Exception e) { fail("Unexpected exception in getLineCount"); } + } + + /** + * This test throw a NullPointerException when the original message was created by + * a MimeMessageInputStreamSource. + */ + public void testMessageCloningViaCoW() throws Exception { + MimeMessage mmorig = getSimpleMessage(); + + MimeMessage mm = new MimeMessageCopyOnWriteProxy(mmorig); + + MimeMessage mm2 = new MimeMessageCopyOnWriteProxy(mm); + + mm2.setHeader("Subject", "Modified"); + ContainerUtil.dispose(mm2); + //((Disposable)mail_dup.getMessage()).dispose(); + + mm.setHeader("Subject", "Modified"); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]