You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ce...@apache.org on 2015/07/03 13:04:53 UTC

svn commit: r1688998 - in /poi/trunk: src/scratchpad/src/org/apache/poi/hsmf/datatypes/ src/scratchpad/testcases/org/apache/poi/hsmf/ test-data/hsmf/

Author: centic
Date: Fri Jul  3 11:04:52 2015
New Revision: 1688998

URL: http://svn.apache.org/r1688998
Log:
Bug 57744: Fix parsing the email submission data when id contains a hyphen

Added:
    poi/trunk/src/scratchpad/testcases/org/apache/poi/hsmf/TestMessageSubmissionChunk.java
    poi/trunk/test-data/hsmf/message_extra_hyphen_submission_chunk.msg   (with props)
    poi/trunk/test-data/hsmf/message_normal_submission_chunk.msg   (with props)
Modified:
    poi/trunk/src/scratchpad/src/org/apache/poi/hsmf/datatypes/MessageSubmissionChunk.java
    poi/trunk/src/scratchpad/testcases/org/apache/poi/hsmf/AllHSMFTests.java

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hsmf/datatypes/MessageSubmissionChunk.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hsmf/datatypes/MessageSubmissionChunk.java?rev=1688998&r1=1688997&r2=1688998&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hsmf/datatypes/MessageSubmissionChunk.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hsmf/datatypes/MessageSubmissionChunk.java Fri Jul  3 11:04:52 2015
@@ -69,10 +69,19 @@ public class MessageSubmissionChunk exte
       for(String part : parts) {
          if(part.startsWith("l=")) {
             // Format of this bit appears to be l=<id>-<time>-<number>
-            if(part.indexOf('-') != -1 && 
-                  part.indexOf('-') != part.lastIndexOf('-')) {
-               String dateS = part.substring(part.indexOf('-')+1, part.lastIndexOf('-'));
-               
+            // ID may contain hyphens.
+
+            String dateS = null;
+            final int numberPartBegin = part.lastIndexOf('-');
+            if (numberPartBegin != -1) {
+                final int datePartBegin = part.lastIndexOf('-', numberPartBegin-1);
+                if (datePartBegin != -1 && 
+                        // cannot extract date if only one hyphen is in the string...
+                        numberPartBegin > datePartBegin) {
+                    dateS = part.substring(datePartBegin + 1, numberPartBegin);
+                }
+            }
+            if (dateS != null) {
                // Should be yymmddhhmmssZ
                Matcher m = datePatern.matcher(dateS);
                if(m.matches()) {

Modified: poi/trunk/src/scratchpad/testcases/org/apache/poi/hsmf/AllHSMFTests.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/testcases/org/apache/poi/hsmf/AllHSMFTests.java?rev=1688998&r1=1688997&r2=1688998&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/testcases/org/apache/poi/hsmf/AllHSMFTests.java (original)
+++ poi/trunk/src/scratchpad/testcases/org/apache/poi/hsmf/AllHSMFTests.java Fri Jul  3 11:04:52 2015
@@ -39,6 +39,7 @@ public final class AllHSMFTests {
       suite.addTestSuite(TestOutlookTextExtractor.class);
       suite.addTestSuite(TestPOIFSChunkParser.class);
       suite.addTestSuite(TestMessageSubmissionChunkY2KRead.class);
+      suite.addTestSuite(TestMessageSubmissionChunk.class);
 
       return suite;
    }

Added: poi/trunk/src/scratchpad/testcases/org/apache/poi/hsmf/TestMessageSubmissionChunk.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/testcases/org/apache/poi/hsmf/TestMessageSubmissionChunk.java?rev=1688998&view=auto
==============================================================================
--- poi/trunk/src/scratchpad/testcases/org/apache/poi/hsmf/TestMessageSubmissionChunk.java (added)
+++ poi/trunk/src/scratchpad/testcases/org/apache/poi/hsmf/TestMessageSubmissionChunk.java Fri Jul  3 11:04:52 2015
@@ -0,0 +1,58 @@
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+
+package org.apache.poi.hsmf;
+
+import java.io.IOException;
+
+import org.apache.poi.hsmf.MAPIMessage;
+import org.apache.poi.hsmf.exceptions.ChunkNotFoundException;
+import org.apache.poi.POIDataSamples;
+
+import java.util.Calendar;
+
+import junit.framework.TestCase;
+
+public final class TestMessageSubmissionChunk extends TestCase {
+    
+    private MAPIMessage mapiMessageExtraHyphenSubmissionChunk;
+    private MAPIMessage mapiMessageNormalSubmissionChunk;
+
+    /**
+     * Initialise this test, load up the test messages.
+     * @throws Exception
+     */
+    public TestMessageSubmissionChunk() throws IOException {
+        POIDataSamples samples = POIDataSamples.getHSMFInstance();
+        this.mapiMessageExtraHyphenSubmissionChunk = new MAPIMessage(samples.openResourceAsStream("message_extra_hyphen_submission_chunk.msg"));
+        this.mapiMessageNormalSubmissionChunk = new MAPIMessage(samples.openResourceAsStream("message_normal_submission_chunk.msg"));
+    }
+
+    public void testReadMessageDateExtraHyphenSubmissionChunk() throws ChunkNotFoundException {
+        final Calendar date = mapiMessageExtraHyphenSubmissionChunk.getMessageDate();
+        TestCase.assertNotNull(date);
+        final int year = date.get(Calendar.YEAR);
+        TestCase.assertEquals(2007, year);
+    }
+
+    public void testReadMessageDateNormalSubmissionChunk() throws ChunkNotFoundException {
+        final Calendar date = mapiMessageNormalSubmissionChunk.getMessageDate();
+        TestCase.assertNotNull(date);
+        final int year = date.get(Calendar.YEAR);
+        TestCase.assertEquals(2007, year);
+    }
+}

Added: poi/trunk/test-data/hsmf/message_extra_hyphen_submission_chunk.msg
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/hsmf/message_extra_hyphen_submission_chunk.msg?rev=1688998&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/test-data/hsmf/message_extra_hyphen_submission_chunk.msg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: poi/trunk/test-data/hsmf/message_normal_submission_chunk.msg
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/hsmf/message_normal_submission_chunk.msg?rev=1688998&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/test-data/hsmf/message_normal_submission_chunk.msg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org