diff --git a/src/core.js b/src/core.js index e8d008074..1ee01d7e5 100644 --- a/src/core.js +++ b/src/core.js @@ -403,6 +403,24 @@ var PDFDocument = (function PDFDocumentClosure() { return true; /* found */ } + var DOCUMENT_INFO = { + get entries() { + // Lazily build this since all the validation functions below are not + // defined until after this file loads. + return shadow(this, 'entries', { + Title: isString, + Author: isString, + Subject: isString, + Keywords: isString, + Creator: isString, + Producer: isString, + CreationDate: isString, + ModDate: isString, + Trapped: isName + }); + } + }; + PDFDocument.prototype = { get linearization() { var length = this.stream.length; @@ -495,18 +513,27 @@ var PDFDocument = (function PDFDocumentClosure() { return shadow(this, 'numPages', num); }, getDocumentInfo: function PDFDocument_getDocumentInfo() { - var info; + var docInfo; if (this.xref.trailer.has('Info')) { var infoDict = this.xref.trailer.get('Info'); - info = {}; - infoDict.forEach(function(key, value) { - info[key] = typeof value !== 'string' ? value : - stringToPDFString(value); - }); + docInfo = {}; + var validEntries = DOCUMENT_INFO.entries; + // Only fill the document info with valid entries from the spec. + for (var key in validEntries) { + if (infoDict.has(key)) { + var value = infoDict.get(key); + // Make sure the value conforms to the spec. + if (validEntries[key](value)) { + docInfo[key] = typeof value !== 'string' ? value : + stringToPDFString(value); + } else { + info('Bad value in document info for "' + key + '"'); + } + } + } } - - return shadow(this, 'getDocumentInfo', info); + return shadow(this, 'getDocumentInfo', docInfo); }, getFingerprint: function PDFDocument_getFingerprint() { var xref = this.xref, fileID; diff --git a/test/pdfs/issue1729.pdf.link b/test/pdfs/issue1729.pdf.link new file mode 100644 index 000000000..ca6fa690c --- /dev/null +++ b/test/pdfs/issue1729.pdf.link @@ -0,0 +1,2 @@ +http://www.environmentallights.com/files/documents/ir_light_hazard.pdf + diff --git a/test/test_manifest.json b/test/test_manifest.json index 0a22160b9..166b4fdc7 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -626,5 +626,13 @@ "pageLimit": 1, "link": true, "type": "eq" + }, + { "id": "issue1729", + "file": "pdfs/issue1729.pdf", + "md5": "29b0eddc3e1dcb23a44384037032d470", + "rounds": 1, + "pageLimit": 1, + "link": true, + "type": "load" } ]