Skip to content

Commit 559485a

Browse files
committed
throw OfficeXmlFileException if hwpf reads an ooxml file
1 parent 2fbfe2e commit 559485a

File tree

3 files changed

+57
-0
lines changed

3 files changed

+57
-0
lines changed

poi-scratchpad/src/main/java/org/apache/poi/hwpf/HWPFDocumentCore.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ Licensed to the Apache Software Foundation (ASF) under one or more
4949
import org.apache.poi.poifs.filesystem.DocumentInputStream;
5050
import org.apache.poi.poifs.filesystem.Entry;
5151
import org.apache.poi.poifs.filesystem.FileMagic;
52+
import org.apache.poi.poifs.filesystem.OfficeXmlFileException;
5253
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
5354
import org.apache.poi.util.IOUtils;
5455
import org.apache.poi.util.Internal;
@@ -138,6 +139,9 @@ public static POIFSFileSystem verifyAndBuildPOIFS(InputStream istream) throws IO
138139
FileMagic fm = FileMagic.valueOf(is);
139140

140141
if (fm != FileMagic.OLE2) {
142+
if (fm == FileMagic.OOXML) {
143+
throw new OfficeXmlFileException("The document is really a OOXML file");
144+
}
141145
throw new IllegalArgumentException("The document is really a "+fm+" file");
142146
}
143147

poi-scratchpad/src/test/java/org/apache/poi/hwpf/HWPFTestDataSamples.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ public static HWPFDocument openSampleFile(String sampleFileName) {
3434
}
3535
}
3636

37+
public static InputStream openSampleFileStream(String sampleFileName) {
38+
return SAMPLES.openResourceAsStream(sampleFileName);
39+
}
40+
3741
public static HWPFOldDocument openOldSampleFile(String sampleFileName) {
3842
try {
3943
InputStream is = POIDataSamples.getDocumentInstance().openResourceAsStream(sampleFileName);
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/* ====================================================================
2+
Licensed to the Apache Software Foundation (ASF) under one or more
3+
contributor license agreements. See the NOTICE file distributed with
4+
this work for additional information regarding copyright ownership.
5+
The ASF licenses this file to You under the Apache License, Version 2.0
6+
(the "License"); you may not use this file except in compliance with
7+
the License. You may obtain a copy of the License at
8+
9+
http://www.apache.org/licenses/LICENSE-2.0
10+
11+
Unless required by applicable law or agreed to in writing, software
12+
distributed under the License is distributed on an "AS IS" BASIS,
13+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
See the License for the specific language governing permissions and
15+
limitations under the License.
16+
==================================================================== */
17+
18+
package org.apache.poi.hwpf;
19+
20+
import org.apache.poi.poifs.filesystem.OfficeXmlFileException;
21+
import org.junit.jupiter.api.Test;
22+
23+
import java.io.InputStream;
24+
25+
import static org.junit.jupiter.api.Assertions.assertEquals;
26+
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
27+
import static org.junit.jupiter.api.Assertions.assertNotNull;
28+
import static org.junit.jupiter.api.Assertions.assertThrows;
29+
30+
public class TestHWPFParser {
31+
@Test
32+
void testDoc() throws Exception {
33+
try (
34+
InputStream stream = HWPFTestDataSamples.openSampleFileStream("Lists.doc");
35+
HWPFDocument doc = HWPFParser.parse(stream)
36+
) {
37+
assertNotNull(doc);
38+
assertEquals(40, doc.getParagraphTable().getParagraphs().size());
39+
}
40+
}
41+
42+
@Test
43+
void testFailOnDocx() throws Exception {
44+
try (InputStream stream = HWPFTestDataSamples.openSampleFileStream("sample.docx")) {
45+
HWPFReadException hre = assertThrows(HWPFReadException.class, () -> HWPFParser.parse(stream));
46+
assertInstanceOf(OfficeXmlFileException.class, hre.getCause());
47+
}
48+
}
49+
}

0 commit comments

Comments
 (0)