diff --git a/src/core/fonts.js b/src/core/fonts.js index 58804a94c..9deb55d18 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -3277,6 +3277,13 @@ var Font = (function FontClosure() { }; } var locaData = loca.data; + var locaDataSize = itemSize * (1 + numGlyphs); + // is loca.data too short or long? + if (locaData.length !== locaDataSize) { + locaData = new Uint8Array(locaDataSize); + locaData.set(loca.data.subarray(0, locaDataSize)); + loca.data = locaData; + } // removing the invalid glyphs var oldGlyfData = glyf.data; var oldGlyfDataLength = oldGlyfData.length; @@ -3320,9 +3327,7 @@ var Font = (function FontClosure() { glyf.data.set(newGlyfData.subarray(0, writeOffset)); } glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset); - loca.data = new Uint8Array(locaData.length + itemSize); - loca.data.set(locaData); - itemEncode(loca.data, locaData.length, + itemEncode(loca.data, locaData.length - itemSize, writeOffset + firstEntryLength); } else { glyf.data = newGlyfData.subarray(0, writeOffset); diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index f88789fda..01a562b80 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -42,6 +42,7 @@ !S2.pdf !helloworld-bad.pdf !zerowidthline.pdf +!bug868745.pdf !issue1002.pdf !issue925.pdf !gradientfill.pdf diff --git a/test/pdfs/bug868745.pdf b/test/pdfs/bug868745.pdf new file mode 100644 index 000000000..b92db20cc Binary files /dev/null and b/test/pdfs/bug868745.pdf differ diff --git a/test/test_manifest.json b/test/test_manifest.json index 4ef1ca4ac..82ada5c10 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -198,6 +198,12 @@ "rounds": 1, "type": "load" }, + { "id": "bug868745", + "file": "pdfs/bug868745.pdf", + "md5": "86111ea5097dd7daffcdea891ad1b348", + "rounds": 1, + "type": "load" + }, { "id": "thuluthfont-pdf", "file": "pdfs/ThuluthFeatures.pdf", "md5": "b7e18bf7a3d6a9c82aefa12d721072fc",