diff options
author | Dominik Stadler <centic@apache.org> | 2015-07-03 11:04:52 +0000 |
---|---|---|
committer | Dominik Stadler <centic@apache.org> | 2015-07-03 11:04:52 +0000 |
commit | df179170a23934654ec8836fc6bc1139b9077bec (patch) | |
tree | fc188d2ea16038c0fa3154703b220062be8e573b /src/scratchpad | |
parent | 2641bb475fd2e8c54edb27abdcdf3bf20c1b6935 (diff) | |
download | poi-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
Diffstat (limited to 'src/scratchpad')
3 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);
+ }
+}
|