You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2019/05/19 13:56:50 UTC
svn commit: r1859503 - in /pdfbox/branches/issue45: ./
fontbox/src/main/java/org/apache/fontbox/cmap/
fontbox/src/test/java/org/apache/fontbox/cmap/
fontbox/src/test/resources/cmap/
Author: lehmi
Date: Sun May 19 13:56:50 2019
New Revision: 1859503
URL: http://svn.apache.org/viewvc?rev=1859503&view=rev
Log:
PDFBOX-4550: add missing check for the start and end values of a bfrange
Added:
pdfbox/branches/issue45/fontbox/src/test/resources/cmap/CMapMalformedbfrange1
- copied unchanged from r1859501, pdfbox/trunk/fontbox/src/test/resources/cmap/CMapMalformedbfrange1
pdfbox/branches/issue45/fontbox/src/test/resources/cmap/CMapMalformedbfrange2
- copied unchanged from r1859501, pdfbox/trunk/fontbox/src/test/resources/cmap/CMapMalformedbfrange2
Modified:
pdfbox/branches/issue45/ (props changed)
pdfbox/branches/issue45/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java
pdfbox/branches/issue45/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMapParser.java
Propchange: pdfbox/branches/issue45/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun May 19 13:56:50 2019
@@ -1,3 +1,3 @@
/pdfbox/branches/no-awt:1618517-1621410
/pdfbox/no-awt:1618514-1618516
-/pdfbox/trunk:1736223,1736227,1736615,1737043,1737130,1737599-1737600,1738755,1740160,1742437,1742442,1743248,1745595,1745606,1745772,1745774,1745776,1745779,1746032,1746151,1749162,1749165,1749432,1766088,1766213,1767585,1768061,1770985,1770988,1772528,1778172,1782679,1786586,1786603,1787546,1789414,1790745,1794073,1794090,1794620,1794753,1794859,1794891,1800566,1812426,1814226,1826836
+/pdfbox/trunk:1736223,1736227,1736615,1737043,1737130,1737599-1737600,1738755,1740160,1742437,1742442,1743248,1745595,1745606,1745772,1745774,1745776,1745779,1746032,1746151,1749162,1749165,1749432,1766088,1766213,1767585,1768061,1770985,1770988,1772528,1778172,1782679,1786586,1786603,1787546,1789414,1790745,1794073,1794090,1794620,1794753,1794859,1794891,1800566,1812426,1814226,1826836,1859501
Modified: pdfbox/branches/issue45/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/issue45/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java?rev=1859503&r1=1859502&r2=1859503&view=diff
==============================================================================
--- pdfbox/branches/issue45/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java (original)
+++ pdfbox/branches/issue45/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java Sun May 19 13:56:50 2019
@@ -362,10 +362,10 @@ public class CMapParser
}
byte[] startCode = (byte[]) nextToken;
byte[] endCode = (byte[]) parseNextToken(cmapStream);
- if (startCode.length != endCode.length)
+ if (!checkBoundaries(startCode, endCode))
{
// PDFBOX-4550: likely corrupt stream
- continue;
+ break;
}
nextToken = parseNextToken(cmapStream);
List<byte[]> array = null;
@@ -418,6 +418,15 @@ public class CMapParser
}
}
+ private boolean checkBoundaries(byte[] startCode, byte[] endCode)
+ {
+ int start = CMap.toInt(startCode, startCode.length);
+ int end = CMap.toInt(endCode, endCode.length);
+ // end has to be bigger than start or equal
+ // the range can not represent more that 255 values
+ return end >= start && (end - start) < 256;
+ }
+
/**
* Returns an input stream containing the given "use" CMap.
*
@@ -714,7 +723,7 @@ public class CMapParser
return intValue;
}
- private String createStringFromBytes(byte[] bytes) throws IOException
+ private String createStringFromBytes(byte[] bytes)
{
return new String(bytes, bytes.length == 1 ? Charsets.ISO_8859_1 : Charsets.UTF_16BE);
}
Modified: pdfbox/branches/issue45/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMapParser.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/issue45/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMapParser.java?rev=1859503&r1=1859502&r2=1859503&view=diff
==============================================================================
--- pdfbox/branches/issue45/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMapParser.java (original)
+++ pdfbox/branches/issue45/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMapParser.java Sun May 19 13:56:50 2019
@@ -110,4 +110,37 @@ public class TestCMapParser extends Test
assertNotNull("Failed to parse nasty CMap file", cMap);
}
+
+ public void testParserWithMalformedbfrange1() throws IOException
+ {
+ CMap cMap = new CMapParser()
+ .parse(new File("src/test/resources/cmap", "CMapMalformedbfrange1"));
+
+ assertNotNull("Failed to parse malformed CMap file", cMap);
+
+ byte[] bytes1 = { 0, 1 };
+ assertEquals("bytes 00 01 from bfrange <0001> <0009> <0041>", "A",
+ cMap.toUnicode(toInt(bytes1, bytes1.length)));
+
+ byte[] bytes2 = { 1, 00 };
+ assertNull(cMap.toUnicode(toInt(bytes2, bytes2.length)));
+
+ }
+
+ public void testParserWithMalformedbfrange2() throws IOException
+ {
+ CMap cMap = new CMapParser()
+ .parse(new File("src/test/resources/cmap", "CMapMalformedbfrange2"));
+
+ assertNotNull("Failed to parse malformed CMap file", cMap);
+
+ byte[] bytes1 = { 0, 1 };
+ assertEquals("bytes 00 01 from bfrange <0001> <0009> <0041>", "A",
+ cMap.toUnicode(toInt(bytes1, bytes1.length)));
+
+ byte[] bytes2 = { 2, 00 };
+ assertNull(cMap.toUnicode(toInt(bytes2, bytes2.length)));
+
+ }
+
}