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
This commit is contained in:
parent
8942828a8f
commit
98314d076e
@ -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()) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
BIN
test-data/hsmf/message_extra_hyphen_submission_chunk.msg
Normal file
BIN
test-data/hsmf/message_extra_hyphen_submission_chunk.msg
Normal file
Binary file not shown.
BIN
test-data/hsmf/message_normal_submission_chunk.msg
Normal file
BIN
test-data/hsmf/message_normal_submission_chunk.msg
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user