From 18db087f791032919e6237446e821bd1eff92f65 Mon Sep 17 00:00:00 2001 From: notmasteryet Date: Wed, 7 Dec 2011 20:59:44 -0600 Subject: [PATCH 1/3] Fixing TrueType code-glyph assigmnent to pass sanitizer --- src/fonts.js | 17 +++++++++++++++-- test/pdfs/lista_preliminar.pdf.link | 1 + test/test_manifest.json | 8 ++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 test/pdfs/lista_preliminar.pdf.link diff --git a/src/fonts.js b/src/fonts.js index 1a4366c19..fa2c0a7f1 100644 --- a/src/fonts.js +++ b/src/fonts.js @@ -1765,7 +1765,7 @@ var Font = (function Font() { var hasShortCmap = !!cmapTable.hasShortCmap; var toUnicode = this.toUnicode; - if (toUnicode) { + if (toUnicode && toUnicode.length > 0) { // checking if cmap is just identity map var isIdentity = true; for (var i = 0, ii = glyphs.length; i < ii; i++) { @@ -1776,9 +1776,22 @@ var Font = (function Font() { } // if it is, replacing with meaningful toUnicode values if (isIdentity) { + var usedUnicodes = [], unassignedUnicodeItems = []; for (var i = 0, ii = glyphs.length; i < ii; i++) { - var unicode = toUnicode[i + 1] || i + 1; + var unicode = toUnicode[i + 1]; + if (!unicode || usedUnicodes[unicode]) { + unassignedUnicodeItems.push(i); + continue; + } glyphs[i].unicode = unicode; + usedUnicodes[unicode] = true; + } + var unusedUnicode = kCmapGlyphOffset; + for (var j = 0, jj = unassignedUnicodeItems.length; j < jj; j++) { + var i = unassignedUnicodeItems[j]; + while (usedUnicodes[unusedUnicode]) + unusedUnicode++; + glyphs[i].unicode = unusedUnicode++; } this.useToUnicode = true; } diff --git a/test/pdfs/lista_preliminar.pdf.link b/test/pdfs/lista_preliminar.pdf.link new file mode 100644 index 000000000..54102b3b1 --- /dev/null +++ b/test/pdfs/lista_preliminar.pdf.link @@ -0,0 +1 @@ +http://www.lfg.com.br/concursodebolsas/lista_preliminar_classificao.pdf diff --git a/test/test_manifest.json b/test/test_manifest.json index bd50068f7..0e6e1913c 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -311,5 +311,13 @@ "pageLimit": 5, "skipPages": [1], "type": "eq" + }, + { "id": "lista_preliminar", + "file": "pdfs/lista_preliminar.pdf", + "md5": "4eff251319eeb660ba8a7a5cfac7787d", + "rounds": 1, + "link": true, + "pageLimit": 3, + "type": "eq" } ] From d4e22f5a92e8b0fb19ea68a5a1b08f9246e7e7ad Mon Sep 17 00:00:00 2001 From: notmasteryet Date: Wed, 7 Dec 2011 22:07:34 -0600 Subject: [PATCH 2/3] Clear canvas for skipped pages --- test/driver.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/driver.js b/test/driver.js index 2467b57a3..64fceee90 100644 --- a/test/driver.js +++ b/test/driver.js @@ -139,6 +139,11 @@ function nextPage(task, loadError) { if (task.skipPages && task.skipPages.indexOf(task.pageNum) >= 0) { log(' skipping page ' + task.pageNum + '/' + task.pdfDoc.numPages + '... '); + // empty the canvas + canvas.width = 1; + canvas.height = 1; + clear(canvas.getContext('2d')); + snapshotCurrentPage(task, ''); return; } From 240bde97b2dc0e03ff388c160f69b9185822ae1a Mon Sep 17 00:00:00 2001 From: notmasteryet Date: Fri, 9 Dec 2011 18:25:44 -0600 Subject: [PATCH 3/3] Using 'in' instead of array index --- src/fonts.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fonts.js b/src/fonts.js index fa2c0a7f1..45a2afb99 100644 --- a/src/fonts.js +++ b/src/fonts.js @@ -1779,7 +1779,7 @@ var Font = (function Font() { var usedUnicodes = [], unassignedUnicodeItems = []; for (var i = 0, ii = glyphs.length; i < ii; i++) { var unicode = toUnicode[i + 1]; - if (!unicode || usedUnicodes[unicode]) { + if (!unicode || unicode in usedUnicodes) { unassignedUnicodeItems.push(i); continue; } @@ -1789,7 +1789,7 @@ var Font = (function Font() { var unusedUnicode = kCmapGlyphOffset; for (var j = 0, jj = unassignedUnicodeItems.length; j < jj; j++) { var i = unassignedUnicodeItems[j]; - while (usedUnicodes[unusedUnicode]) + while (unusedUnicode in usedUnicodes) unusedUnicode++; glyphs[i].unicode = unusedUnicode++; }