From 3c53e34c7b9815b6ab5e82117e300045f6a8c2b1 Mon Sep 17 00:00:00 2001 From: Kalervo Kujala Date: Sat, 15 Oct 2011 23:32:56 +0300 Subject: [PATCH 1/3] Refactor duplicate code in getBlackCode. --- pdf.js | 64 +++++++++++++++++++++++++--------------------------------- 1 file changed, 27 insertions(+), 37 deletions(-) diff --git a/pdf.js b/pdf.js index 3ebddd119..0aaf68539 100644 --- a/pdf.js +++ b/pdf.js @@ -2089,45 +2089,35 @@ var CCITTFaxStream = (function ccittFaxStream() { return p[1]; } } else { - var n; - for (n = 2; n <= 6; ++n) { - code = this.lookBits(n); - if (code == EOF) - return 1; - if (n < 6) - code <<= 6 - n; - p = blackTable3[code]; - if (p[0] == n) { - this.eatBits(n); - return p[1]; - } - } - for (n = 7; n <= 12; ++n) { - code = this.lookBits(n); - if (code == EOF) - return 1; - if (n < 12) - code <<= 12 - n; - if (code >= 64) { - p = blackTable2[code - 64]; - if (p[0] == n) { - this.eatBits(n); - return p[1]; + var findBlackCode = function ccittFaxStreamFindBlackCode(start, end, table, limit) { + for (var i = start; i <= end; ++i) { + var code = this.lookBits(i); + if (code == EOF) + return [true, 1]; + if (i < end) + code <<= end - i; + if (code >= limit) { + var p = table[code]; + if (p[0] == i) { + this.eatBits(i); + return [true, p[1]]; + } } } - } - for (n = 10; n <= 13; ++n) { - code = this.lookBits(n); - if (code == EOF) - return 1; - if (n < 13) - code <<= 13 - n; - p = blackTable1[code]; - if (p[0] == n) { - this.eatBits(n); - return p[1]; - } - } + return [false, 0]; + }; + + var result = findBlackCode(2, 6, blackTable3, -1); + if (result[0]) + return result[1]; + + result = findBlackCode(7, 12, blackTable2, 64); + if (result[0]) + return result[1]; + + result = findBlackCode(10, 13, blackTable1, -1); + if (result[0]) + return result[1]; } warn('bad black code'); this.eatBits(1); From d39ea4dc5486911a8ce154f00d0d06b54b590386 Mon Sep 17 00:00:00 2001 From: Kalervo Kujala Date: Sun, 16 Oct 2011 12:34:34 +0300 Subject: [PATCH 2/3] Adhere to 80 char line limit. --- pdf.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pdf.js b/pdf.js index 0aaf68539..60774808a 100644 --- a/pdf.js +++ b/pdf.js @@ -2089,7 +2089,8 @@ var CCITTFaxStream = (function ccittFaxStream() { return p[1]; } } else { - var findBlackCode = function ccittFaxStreamFindBlackCode(start, end, table, limit) { + var findBlackCode = function ccittFaxStreamFindBlackCode(start, end, + table, limit) { for (var i = start; i <= end; ++i) { var code = this.lookBits(i); if (code == EOF) From 6688c3a1f5c1ff8d0071bba8d76e60df9f99ec2f Mon Sep 17 00:00:00 2001 From: Kalervo Kujala Date: Mon, 17 Oct 2011 22:24:19 +0300 Subject: [PATCH 3/3] Handle blackTable2 array access correctly. --- pdf.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pdf.js b/pdf.js index 60774808a..f11d28c36 100644 --- a/pdf.js +++ b/pdf.js @@ -2098,7 +2098,7 @@ var CCITTFaxStream = (function ccittFaxStream() { if (i < end) code <<= end - i; if (code >= limit) { - var p = table[code]; + var p = table[code - ((limit == -1) ? 0 : limit)]; if (p[0] == i) { this.eatBits(i); return [true, p[1]];