diff --git a/src/core/obj.js b/src/core/obj.js index 4d3c18735..7196797ba 100644 --- a/src/core/obj.js +++ b/src/core/obj.js @@ -302,8 +302,9 @@ var Catalog = (function CatalogClosure() { assert(!s || isName(s), 'Invalid style in PageLabel dictionary.'); style = (s ? s.name : null); - prefix = labelDict.get('P') || ''; - assert(isString(prefix), 'Invalid prefix in PageLabel dictionary.'); + var p = labelDict.get('P') || ''; + assert(isString(p), 'Invalid prefix in PageLabel dictionary.'); + prefix = stringToPDFString(p); start = labelDict.get('St') || 1; assert(isInt(start), 'Invalid start in PageLabel dictionary.'); diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index f07e5921f..ecfb1700d 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -40,6 +40,7 @@ !issue7544.pdf !issue7598.pdf !issue7665.pdf +!bad-PageLabels.pdf !filled-background.pdf !ArabicCIDTrueType.pdf !ThuluthFeatures.pdf diff --git a/test/pdfs/bad-PageLabels.pdf b/test/pdfs/bad-PageLabels.pdf new file mode 100644 index 000000000..8cafbcd10 Binary files /dev/null and b/test/pdfs/bad-PageLabels.pdf differ diff --git a/test/unit/api_spec.js b/test/unit/api_spec.js index 663193b11..2e50bd7e7 100644 --- a/test/unit/api_spec.js +++ b/test/unit/api_spec.js @@ -503,14 +503,24 @@ describe('api', function() { return pdfDoc.getPageLabels(); }); - Promise.all([promise0, promise1, promise2]).then(function (pageLabels) { + // PageLabels with bad "Prefix" entries. + var url3 = new URL('../pdfs/bad-PageLabels.pdf', window.location).href; + var loadingTask3 = new PDFJS.getDocument(url3); + var promise3 = loadingTask3.promise.then(function (pdfDoc) { + return pdfDoc.getPageLabels(); + }); + + Promise.all([promise0, promise1, promise2, promise3]).then( + function (pageLabels) { expect(pageLabels[0]).toEqual(['i', 'ii', 'iii', '1']); expect(pageLabels[1]).toEqual(['Front Page1']); expect(pageLabels[2]).toEqual(['1', '2']); + expect(pageLabels[3]).toEqual(['X1']); loadingTask0.destroy(); loadingTask1.destroy(); loadingTask2.destroy(); + loadingTask3.destroy(); done(); }).catch(function (reason) { done.fail(reason);