From 0ddda673b3f669f618d5bdc3c0b4cb516427e4c1 Mon Sep 17 00:00:00 2001 From: Andreas Beeker Date: Sat, 9 Dec 2017 11:44:19 +0000 Subject: [PATCH] #61881 - handle invalid font names git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1817599 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/hslf/record/FontEntityAtom.java | 30 ++++++++++++++++-- .../poi/hslf/record/TestFontCollection.java | 14 ++++++++ test-data/slideshow/bug61881.ppt | Bin 0 -> 74752 bytes 3 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 test-data/slideshow/bug61881.ppt diff --git a/src/scratchpad/src/org/apache/poi/hslf/record/FontEntityAtom.java b/src/scratchpad/src/org/apache/poi/hslf/record/FontEntityAtom.java index 073ce26946..118fc1d3bf 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/record/FontEntityAtom.java +++ b/src/scratchpad/src/org/apache/poi/hslf/record/FontEntityAtom.java @@ -86,15 +86,39 @@ public final class FontEntityAtom extends RecordAtom { * @return font name */ public String getFontName(){ - int maxLen = Math.min(_recdata.length,64); - for(int i = 0; i < maxLen; i+=2){ + final int maxLen = Math.min(_recdata.length,64); + for(int i = 0; i+1 < maxLen; i+=2){ //loop until find null-terminated end of the font name - if(_recdata[i] == 0 && _recdata[i + 1] == 0) { + if(_recdata[i] == 0 && _recdata[i + 1] == 0 && !isFontNamePremature0terminated(i)) { return StringUtil.getFromUnicodeLE(_recdata, 0, i/2); } } return null; } + + /** + * #61881: there seem to be programs out there, which write the 0-termination also + * at the beginning of the string. Check if the next two bytes contain a valid ascii char + * and correct the _recdata with a '?' char + */ + private boolean isFontNamePremature0terminated(final int index) { + if (index > 0) { + // for now we only check the first char + return false; + } + + if (_recdata.length < index+4) { + return false; + } + + final int cp = LittleEndian.getShort(_recdata, index+2); + if (!Character.isJavaIdentifierPart(cp)) { + return false; + } + + _recdata[index] = '?'; + return true; + } /** * Set the name of the font. diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/record/TestFontCollection.java b/src/scratchpad/testcases/org/apache/poi/hslf/record/TestFontCollection.java index 7ca07bd82e..36bddee8cf 100644 --- a/src/scratchpad/testcases/org/apache/poi/hslf/record/TestFontCollection.java +++ b/src/scratchpad/testcases/org/apache/poi/hslf/record/TestFontCollection.java @@ -23,9 +23,12 @@ import static org.junit.Assert.assertNull; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.InputStream; +import org.apache.poi.POIDataSamples; import org.apache.poi.hslf.usermodel.HSLFFontInfo; import org.apache.poi.hslf.usermodel.HSLFFontInfoPredefined; +import org.apache.poi.hslf.usermodel.HSLFSlideShow; import org.apache.poi.poifs.storage.RawDataUtil; import org.junit.BeforeClass; import org.junit.Test; @@ -34,6 +37,8 @@ import org.junit.Test; * Tests {@code FontCollection} and {@code FontEntityAtom} records */ public final class TestFontCollection { + private static final POIDataSamples _slTests = POIDataSamples.getSlideShowInstance(); + // From a real file private static byte[] data; @@ -87,4 +92,13 @@ public final class TestFontCollection { byte[] recdata = out.toByteArray(); assertArrayEquals(recdata, data); } + + @Test + public void bug61881() throws IOException { + try (InputStream is = _slTests.openResourceAsStream("bug61881.ppt")) { + try (HSLFSlideShow ppt = new HSLFSlideShow(is)) { + assertEquals("?imes New Roman",ppt.getFont(3).getTypeface()); + } + } + } } diff --git a/test-data/slideshow/bug61881.ppt b/test-data/slideshow/bug61881.ppt new file mode 100644 index 0000000000000000000000000000000000000000..1fa859064e485a435eae9964f3ecbb0368199a6b GIT binary patch literal 74752 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