From d6cb3cbbd72062b89587332d31c100239e74b7cd Mon Sep 17 00:00:00 2001 From: mrqzzz Date: Tue, 13 Mar 2012 16:52:55 +0100 Subject: [PATCH 1/3] Handled case where var "outlineDict" was null (in certain PDFs). Handled case where var "e" was null in "function xRefGetEntry" (in certain PDFs) --- src/obj.js | 66 +++++++++++++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 31 deletions(-) diff --git a/src/obj.js b/src/obj.js index 3cdee8778..575dbe133 100644 --- a/src/obj.js +++ b/src/obj.js @@ -134,37 +134,39 @@ var Catalog = (function CatalogClosure() { while (queue.length > 0) { var i = queue.shift(); var outlineDict = xref.fetch(i.obj); - if (!outlineDict.has('Title')) - error('Invalid outline item'); - var dest = outlineDict.get('A'); - if (dest) - dest = xref.fetchIfRef(dest).get('D'); - else if (outlineDict.has('Dest')) { - dest = outlineDict.get('Dest'); - if (isName(dest)) - dest = dest.name; - } - var title = xref.fetchIfRef(outlineDict.get('Title')); - var outlineItem = { - dest: dest, - title: stringToPDFString(title), - color: outlineDict.get('C') || [0, 0, 0], - count: outlineDict.get('Count'), - bold: !!(outlineDict.get('F') & 2), - italic: !!(outlineDict.get('F') & 1), - items: [] - }; - i.parent.items.push(outlineItem); - obj = outlineDict.get('First'); - if (isRef(obj) && !processed.has(obj)) { - queue.push({obj: obj, parent: outlineItem}); - processed.put(obj); - } - obj = outlineDict.get('Next'); - if (isRef(obj) && !processed.has(obj)) { - queue.push({obj: obj, parent: i.parent}); - processed.put(obj); - } + if(outlineDict != null){ + if (!outlineDict.has('Title')) + error('Invalid outline item'); + var dest = outlineDict.get('A'); + if (dest) + dest = xref.fetchIfRef(dest).get('D'); + else if (outlineDict.has('Dest')) { + dest = outlineDict.get('Dest'); + if (isName(dest)) + dest = dest.name; + } + var title = xref.fetchIfRef(outlineDict.get('Title')); + var outlineItem = { + dest: dest, + title: stringToPDFString(title), + color: outlineDict.get('C') || [0, 0, 0], + count: outlineDict.get('Count'), + bold: !!(outlineDict.get('F') & 2), + italic: !!(outlineDict.get('F') & 1), + items: [] + }; + i.parent.items.push(outlineItem); + obj = outlineDict.get('First'); + if (isRef(obj) && !processed.has(obj)) { + queue.push({obj: obj, parent: outlineItem}); + processed.put(obj); + } + obj = outlineDict.get('Next'); + if (isRef(obj) && !processed.has(obj)) { + queue.push({obj: obj, parent: i.parent}); + processed.put(obj); + } + } } } } @@ -569,6 +571,8 @@ var XRef = (function XRefClosure() { }, getEntry: function xRefGetEntry(i) { var e = this.entries[i]; + if(e == null) + return null; return e.free ? null : e; // returns null is the entry is free }, fetchIfRef: function xRefFetchIfRef(obj) { From 2fbfed476edead6ace367420fba01f3a996ca8b9 Mon Sep 17 00:00:00 2001 From: Marcus Oblak Date: Tue, 13 Mar 2012 22:25:39 +0100 Subject: [PATCH 2/3] Fixed code formatting. --- src/obj.js | 70 +++++++++++++++++++++++++++--------------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/src/obj.js b/src/obj.js index 575dbe133..c0b8ccb09 100644 --- a/src/obj.js +++ b/src/obj.js @@ -134,39 +134,39 @@ var Catalog = (function CatalogClosure() { while (queue.length > 0) { var i = queue.shift(); var outlineDict = xref.fetch(i.obj); - if(outlineDict != null){ - if (!outlineDict.has('Title')) - error('Invalid outline item'); - var dest = outlineDict.get('A'); - if (dest) - dest = xref.fetchIfRef(dest).get('D'); - else if (outlineDict.has('Dest')) { - dest = outlineDict.get('Dest'); - if (isName(dest)) - dest = dest.name; - } - var title = xref.fetchIfRef(outlineDict.get('Title')); - var outlineItem = { - dest: dest, - title: stringToPDFString(title), - color: outlineDict.get('C') || [0, 0, 0], - count: outlineDict.get('Count'), - bold: !!(outlineDict.get('F') & 2), - italic: !!(outlineDict.get('F') & 1), - items: [] - }; - i.parent.items.push(outlineItem); - obj = outlineDict.get('First'); - if (isRef(obj) && !processed.has(obj)) { - queue.push({obj: obj, parent: outlineItem}); - processed.put(obj); - } - obj = outlineDict.get('Next'); - if (isRef(obj) && !processed.has(obj)) { - queue.push({obj: obj, parent: i.parent}); - processed.put(obj); - } - } + if (outlineDict === null) + continue; + if (!outlineDict.has('Title')) + error('Invalid outline item'); + var dest = outlineDict.get('A'); + if (dest) + dest = xref.fetchIfRef(dest).get('D'); + else if (outlineDict.has('Dest')) { + dest = outlineDict.get('Dest'); + if (isName(dest)) + dest = dest.name; + } + var title = xref.fetchIfRef(outlineDict.get('Title')); + var outlineItem = { + dest: dest, + title: stringToPDFString(title), + color: outlineDict.get('C') || [0, 0, 0], + count: outlineDict.get('Count'), + bold: !!(outlineDict.get('F') & 2), + italic: !!(outlineDict.get('F') & 1), + items: [] + }; + i.parent.items.push(outlineItem); + obj = outlineDict.get('First'); + if (isRef(obj) && !processed.has(obj)) { + queue.push({obj: obj, parent: outlineItem}); + processed.put(obj); + } + obj = outlineDict.get('Next'); + if (isRef(obj) && !processed.has(obj)) { + queue.push({obj: obj, parent: i.parent}); + processed.put(obj); + } } } } @@ -571,8 +571,8 @@ var XRef = (function XRefClosure() { }, getEntry: function xRefGetEntry(i) { var e = this.entries[i]; - if(e == null) - return null; + if (e === null) + return null; return e.free ? null : e; // returns null is the entry is free }, fetchIfRef: function xRefFetchIfRef(obj) { From 7ec282cbb02fc9e65518c47146d1b3d347ee81f6 Mon Sep 17 00:00:00 2001 From: Marcus Oblak Date: Wed, 14 Mar 2012 21:58:22 +0100 Subject: [PATCH 3/3] Re-Fixed Formatting (Lint friendly) --- src/obj.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/obj.js b/src/obj.js index c0b8ccb09..c38f922e5 100644 --- a/src/obj.js +++ b/src/obj.js @@ -144,7 +144,7 @@ var Catalog = (function CatalogClosure() { else if (outlineDict.has('Dest')) { dest = outlineDict.get('Dest'); if (isName(dest)) - dest = dest.name; + dest = dest.name; } var title = xref.fetchIfRef(outlineDict.get('Title')); var outlineItem = { @@ -166,7 +166,7 @@ var Catalog = (function CatalogClosure() { if (isRef(obj) && !processed.has(obj)) { queue.push({obj: obj, parent: i.parent}); processed.put(obj); - } + } } } }