aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Stadler <centic@apache.org>2015-07-03 11:04:52 +0000
committerDominik Stadler <centic@apache.org>2015-07-03 11:04:52 +0000
commitdf179170a23934654ec8836fc6bc1139b9077bec (patch)
treefc188d2ea16038c0fa3154703b220062be8e573b
parent2641bb475fd2e8c54edb27abdcdf3bf20c1b6935 (diff)
downloadpoi-df179170a23934654ec8836fc6bc1139b9077bec.tar.gz
poi-df179170a23934654ec8836fc6bc1139b9077bec.zip
Bug 57744: Fix parsing the email submission data when id contains a hyphen
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1688998 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/scratchpad/src/org/apache/poi/hsmf/datatypes/MessageSubmissionChunk.java17
-rw-r--r--src/scratchpad/testcases/org/apache/poi/hsmf/AllHSMFTests.java1
-rw-r--r--src/scratchpad/testcases/org/apache/poi/hsmf/TestMessageSubmissionChunk.java58
-rw-r--r--test-data/hsmf/message_extra_hyphen_submission_chunk.msgbin0 -> 26112 bytes
-rw-r--r--test-data/hsmf/message_normal_submission_chunk.msgbin0 -> 31744 bytes
5 files changed, 72 insertions, 4 deletions
diff --git a/src/scratchpad/src/org/apache/poi/hsmf/datatypes/MessageSubmissionChunk.java b/src/scratchpad/src/org/apache/poi/hsmf/datatypes/MessageSubmissionChunk.java
index 985e58fce6..dd9ab9a5f0 100644
--- a/src/scratchpad/src/org/apache/poi/hsmf/datatypes/MessageSubmissionChunk.java
+++ b/src/scratchpad/src/org/apache/poi/hsmf/datatypes/MessageSubmissionChunk.java
@@ -69,10 +69,19 @@ public class MessageSubmissionChunk extends Chunk {
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()) {
diff --git a/src/scratchpad/testcases/org/apache/poi/hsmf/AllHSMFTests.java b/src/scratchpad/testcases/org/apache/poi/hsmf/AllHSMFTests.java
index fe8cb11243..7664bddec3 100644
--- a/src/scratchpad/testcases/org/apache/poi/hsmf/AllHSMFTests.java
+++ b/src/scratchpad/testcases/org/apache/poi/hsmf/AllHSMFTests.java
@@ -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;
}
diff --git a/src/scratchpad/testcases/org/apache/poi/hsmf/TestMessageSubmissionChunk.java b/src/scratchpad/testcases/org/apache/poi/hsmf/TestMessageSubmissionChunk.java
new file mode 100644
index 0000000000..0cbad21b96
--- /dev/null
+++ b/src/scratchpad/testcases/org/apache/poi/hsmf/TestMessageSubmissionChunk.java
@@ -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);
+ }
+}
diff --git a/test-data/hsmf/message_extra_hyphen_submission_chunk.msg b/test-data/hsmf/message_extra_hyphen_submission_chunk.msg
new file mode 100644
index 0000000000..3bcb8d363f
--- /dev/null
+++ b/test-data/hsmf/message_extra_hyphen_submission_chunk.msg
Binary files differ
diff --git a/test-data/hsmf/message_normal_submission_chunk.msg b/test-data/hsmf/message_normal_submission_chunk.msg
new file mode 100644
index 0000000000..bb15d2746f
--- /dev/null
+++ b/test-data/hsmf/message_normal_submission_chunk.msg
Binary files differ