From 82a9a13e5f9a027b867084d2c38628b904e6eb35 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Wed, 13 Nov 2013 13:45:59 -0600 Subject: [PATCH] Fixes glyphs with invalid flags --- src/core/fonts.js | 4 ++-- test/pdfs/.gitignore | 1 + test/pdfs/bug903856.pdf | Bin 0 -> 8439 bytes test/test_manifest.json | 8 ++++++++ 4 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 test/pdfs/bug903856.pdf diff --git a/src/core/fonts.js b/src/core/fonts.js index 9deb55d18..5f96a8b93 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -3163,8 +3163,8 @@ var Font = (function FontClosure() { for (var i = 0; i < flagsCount; i++) { var flag = glyf[j++]; if (flag & 0xC0) { - // reserved flags must be zero, rejecting - return 0; + // reserved flags must be zero, cleaning up + glyf[j - 1] = flag & 0x3F; } var xyLength = ((flag & 2) ? 1 : (flag & 16) ? 0 : 2) + ((flag & 4) ? 1 : (flag & 32) ? 0 : 2); diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 01a562b80..2f60ac8d3 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -46,6 +46,7 @@ !issue1002.pdf !issue925.pdf !gradientfill.pdf +!bug903856.pdf !basicapi.pdf !mixedfonts.pdf !shading_extend.pdf diff --git a/test/pdfs/bug903856.pdf b/test/pdfs/bug903856.pdf new file mode 100644 index 0000000000000000000000000000000000000000..334d23736e13deb4f8a7cfc97eb716613fc4ed3f GIT binary patch literal 8439 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