From e6bd00d2a0cb80257a61bfdcf86634258b15119b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Thu, 10 Nov 2022 17:16:15 +0100 Subject: [PATCH] Fixed #1863 Export to PDF - cannot read fonts with long CMAP (invalid length value) --- CHANGELOG.md | 5 ++++- lib/gnujpdf.jar | Bin 210222 -> 210075 bytes libsrc/gnujpdf/src/gnu/jpdf/TtfParser.java | 15 +++++---------- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef6742c89..b8ed6f4e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ All notable changes to this project will be documented in this file. ### Fixed - Exception when bundle selected - File path in window title for SWFs inside DefineBinaryData +- [#1863] Export to PDF - cannot read fonts with long CMAP ## [16.2.0] - 2022-11-08 ### Added @@ -2409,7 +2410,8 @@ All notable changes to this project will be documented in this file. ### Added - Initial public release -[Unreleased]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version16.1.0...dev +[Unreleased]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version16.2.0...dev +[16.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version16.1.0...version16.2.0 [16.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version16.0.4...version16.1.0 [16.0.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version16.0.3...version16.0.4 [16.0.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version16.0.2...version16.0.3 @@ -2536,6 +2538,7 @@ All notable changes to this project will be documented in this file. [alpha 9]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha8...alpha9 [alpha 8]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha7...alpha8 [alpha 7]: https://github.com/jindrapetrik/jpexs-decompiler/releases/tag/alpha7 +[#1863]: https://www.free-decompiler.com/flash/issues/1863 [#1414]: https://www.free-decompiler.com/flash/issues/1414 [#1755]: https://www.free-decompiler.com/flash/issues/1755 [#1460]: https://www.free-decompiler.com/flash/issues/1460 diff --git a/lib/gnujpdf.jar b/lib/gnujpdf.jar index f97a112060a299e2ed3628a96785d213d3978167..dabb6ad7839da3c675bc94d47a4fdcaa03e1a9d3 100644 GIT binary patch delta 5515 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 delta 5613 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 glyphIndices = new ArrayList<>(); - long startA = input.getFilePointer(); - long a = startA; - for (; a < tableOffsets.get("cmap") + offset + length; a += 2) { - int glyphIndex = readUnsignedShort(input); - glyphIndices.add(glyphIndex); - } - + + long glyphIdArrayOffset = input.getFilePointer(); + for (int j = 0; j < segCount; j++) { for (int k = startCodes.get(j); k <= endCodes.get(j); k++) { if (k == 65535) { @@ -326,7 +320,8 @@ public class TtfParser { } else { int glyphIndex = (idRangeOffsets.get(j) - 2 * (segCount - j)) / 2 + (k - startCodes.get(j)); - int glyph = glyphIndices.get(glyphIndex); + input.seek(glyphIdArrayOffset + 2 * glyphIndex); + int glyph = readUnsignedShort(input); ctg.put(k, glyph); } }