diff --git a/Makefile b/Makefile index a9cd2793f..ebffb374c 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,9 @@ BUILD_DIR := build DEFAULT_BROWSERS := resources/browser_manifests/browser_manifest.json DEFAULT_TESTS := test_manifest.json +EXTENSION_SRC := ./extensions/firefox +EXTENSION_NAME := pdf.js.xpi + # Let folks define custom rules for their clones. -include local.mk @@ -103,14 +106,17 @@ lint: # TODO: Use the Closure compiler to optimize the pdf.js files. # GH_PAGES = $(BUILD_DIR)/gh-pages -web: | compiler pages-repo \ +web: | extension compiler pages-repo \ $(addprefix $(GH_PAGES)/, $(PDF_JS_FILES)) \ $(addprefix $(GH_PAGES)/, $(wildcard web/*.*)) \ - $(addprefix $(GH_PAGES)/, $(wildcard web/images/*.*)) + $(addprefix $(GH_PAGES)/, $(wildcard web/images/*.*)) \ + $(addprefix $(GH_PAGES)/, $(wildcard $(EXTENSION_SRC)/*.xpi)) @cp $(GH_PAGES)/web/index.html.template $(GH_PAGES)/index.html; @cd $(GH_PAGES); git add -A; + @echo @echo "Website built in $(GH_PAGES)." + @echo "Don't forget to cd into $(GH_PAGES)/ and issue 'git commit' to push changes." # make pages-repo # @@ -126,6 +132,7 @@ pages-repo: | $(BUILD_DIR) fi; @mkdir -p $(GH_PAGES)/web; @mkdir -p $(GH_PAGES)/web/images; + @mkdir -p $(GH_PAGES)/$(EXTENSION_SRC); $(GH_PAGES)/%.js: %.js @cp $< $@ @@ -136,6 +143,9 @@ $(GH_PAGES)/web/%: web/% $(GH_PAGES)/web/images/%: web/images/% @cp $< $@ +$(GH_PAGES)/$(EXTENSION_SRC)/%: $(EXTENSION_SRC)/% + @cp -R $< $@ + # # make compiler # # # # This target downloads the Closure compiler, and places it in the @@ -149,13 +159,11 @@ $(GH_PAGES)/web/images/%: web/images/% # curl $(COMPILER_URL) > $(BUILD_DIR)/compiler.zip; # cd $(BUILD_DIR); unzip compiler.zip compiler.jar; -# make firefox-extension +# make extension # # This target produce a restartless firefox extension containing a # copy of the pdf.js source. CONTENT_DIR := content -EXTENSION_SRC := ./extensions/firefox -EXTENSION_NAME := pdf.js.xpi PDF_WEB_FILES = \ web/images \ web/compatibility.js \ diff --git a/fonts.js b/fonts.js index 4f0d55d74..f31c52b76 100644 --- a/fonts.js +++ b/fonts.js @@ -26,53 +26,53 @@ var kHintingEnabled = false; */ var stdFontMap = { 'ArialNarrow': 'Helvetica', - 'ArialNarrow_Bold': 'Helvetica-Bold', - 'ArialNarrow_BoldItalic': 'Helvetica-BoldOblique', - 'ArialNarrow_Italic': 'Helvetica-Oblique', + 'ArialNarrow-Bold': 'Helvetica-Bold', + 'ArialNarrow-BoldItalic': 'Helvetica-BoldOblique', + 'ArialNarrow-Italic': 'Helvetica-Oblique', 'ArialBlack': 'Helvetica', - 'ArialBlack_Bold': 'Helvetica-Bold', - 'ArialBlack_BoldItalic': 'Helvetica-BoldOblique', - 'ArialBlack_Italic': 'Helvetica-Oblique', + 'ArialBlack-Bold': 'Helvetica-Bold', + 'ArialBlack-BoldItalic': 'Helvetica-BoldOblique', + 'ArialBlack-Italic': 'Helvetica-Oblique', 'Arial': 'Helvetica', - 'Arial_Bold': 'Helvetica-Bold', - 'Arial_BoldItalic': 'Helvetica-BoldOblique', - 'Arial_Italic': 'Helvetica-Oblique', - 'Arial_BoldItalicMT': 'Helvetica-BoldOblique', - 'Arial_BoldMT': 'Helvetica-Bold', - 'Arial_ItalicMT': 'Helvetica-Oblique', + 'Arial-Bold': 'Helvetica-Bold', + 'Arial-BoldItalic': 'Helvetica-BoldOblique', + 'Arial-Italic': 'Helvetica-Oblique', + 'Arial-BoldItalicMT': 'Helvetica-BoldOblique', + 'Arial-BoldMT': 'Helvetica-Bold', + 'Arial-ItalicMT': 'Helvetica-Oblique', 'ArialMT': 'Helvetica', - 'Courier_Bold': 'Courier-Bold', - 'Courier_BoldItalic': 'Courier-BoldOblique', - 'Courier_Italic': 'Courier-Oblique', + 'Courier-Bold': 'Courier-Bold', + 'Courier-BoldItalic': 'Courier-BoldOblique', + 'Courier-Italic': 'Courier-Oblique', 'CourierNew': 'Courier', - 'CourierNew_Bold': 'Courier-Bold', - 'CourierNew_BoldItalic': 'Courier-BoldOblique', - 'CourierNew_Italic': 'Courier-Oblique', - 'CourierNewPS_BoldItalicMT': 'Courier-BoldOblique', - 'CourierNewPS_BoldMT': 'Courier-Bold', - 'CourierNewPS_ItalicMT': 'Courier-Oblique', + 'CourierNew-Bold': 'Courier-Bold', + 'CourierNew-BoldItalic': 'Courier-BoldOblique', + 'CourierNew-Italic': 'Courier-Oblique', + 'CourierNewPS-BoldItalicMT': 'Courier-BoldOblique', + 'CourierNewPS-BoldMT': 'Courier-Bold', + 'CourierNewPS-ItalicMT': 'Courier-Oblique', 'CourierNewPSMT': 'Courier', - 'Helvetica_Bold': 'Helvetica-Bold', - 'Helvetica_BoldItalic': 'Helvetica-BoldOblique', - 'Helvetica_Italic': 'Helvetica-Oblique', - 'Symbol_Bold': 'Symbol', - 'Symbol_BoldItalic': 'Symbol', - 'Symbol_Italic': 'Symbol', + 'Helvetica-Bold': 'Helvetica-Bold', + 'Helvetica-BoldItalic': 'Helvetica-BoldOblique', + 'Helvetica-Italic': 'Helvetica-Oblique', + 'Symbol-Bold': 'Symbol', + 'Symbol-BoldItalic': 'Symbol', + 'Symbol-Italic': 'Symbol', 'TimesNewRoman': 'Times-Roman', - 'TimesNewRoman_Bold': 'Times-Bold', - 'TimesNewRoman_BoldItalic': 'Times-BoldItalic', - 'TimesNewRoman_Italic': 'Times-Italic', + 'TimesNewRoman-Bold': 'Times-Bold', + 'TimesNewRoman-BoldItalic': 'Times-BoldItalic', + 'TimesNewRoman-Italic': 'Times-Italic', 'TimesNewRomanPS': 'Times-Roman', - 'TimesNewRomanPS_Bold': 'Times-Bold', - 'TimesNewRomanPS_BoldItalic': 'Times-BoldItalic', - 'TimesNewRomanPS_BoldItalicMT': 'Times-BoldItalic', - 'TimesNewRomanPS_BoldMT': 'Times-Bold', - 'TimesNewRomanPS_Italic': 'Times-Italic', - 'TimesNewRomanPS_ItalicMT': 'Times-Italic', + 'TimesNewRomanPS-Bold': 'Times-Bold', + 'TimesNewRomanPS-BoldItalic': 'Times-BoldItalic', + 'TimesNewRomanPS-BoldItalicMT': 'Times-BoldItalic', + 'TimesNewRomanPS-BoldMT': 'Times-Bold', + 'TimesNewRomanPS-Italic': 'Times-Italic', + 'TimesNewRomanPS-ItalicMT': 'Times-Italic', 'TimesNewRomanPSMT': 'Times-Roman', - 'TimesNewRomanPSMT_Bold': 'Times-Bold', - 'TimesNewRomanPSMT_BoldItalic': 'Times-BoldItalic', - 'TimesNewRomanPSMT_Italic': 'Times-Italic' + 'TimesNewRomanPSMT-Bold': 'Times-Bold', + 'TimesNewRomanPSMT-BoldItalic': 'Times-BoldItalic', + 'TimesNewRomanPSMT-Italic': 'Times-Italic' }; var serifFonts = { @@ -441,7 +441,9 @@ var Font = (function Font() { if (!file) { // The file data is not specified. Trying to fix the font name // to be used with the canvas.font. - var fontName = stdFontMap[name] || name.replace('_', '-'); + var fontName = name.replace(/,_/g, '-'); + fontName = stdFontMap[fontName] || fontName; + this.bold = (fontName.search(/bold/gi) != -1); this.italic = (fontName.search(/oblique/gi) != -1) || (fontName.search(/italic/gi) != -1); @@ -2890,7 +2892,15 @@ var Type2CFF = (function type2CFF() { if (b <= 21) { if (b === 12) { ++pos; - var b = (b << 8) | dict[pos]; + var op = dict[pos]; + if ((op > 14 && op < 17) || + (op > 23 && op < 30) || op > 38) { + warn('Invalid CFF dictionary key: ' + op); + // trying to replace it with initialRandomSeed + // to pass sanitizer + dict[pos] = 19; + } + var b = (b << 8) | op; } entries.push([b, operands]); operands = []; diff --git a/pdf.js b/pdf.js index 82345b17b..6f4524db5 100644 --- a/pdf.js +++ b/pdf.js @@ -4791,7 +4791,7 @@ var PartialEvaluator = (function partialEvaluator() { return null; // Using base font name as a font name. - baseFontName = baseFontName.name.replace(/,/g, '_'); + baseFontName = baseFontName.name.replace(/,_/g, '-'); var metricsAndMap = this.getBaseFontMetricsAndMap(baseFontName); var properties = { @@ -6805,11 +6805,11 @@ var PDFFunction = (function pdfFunction() { diff.push(c1[i] - c0[i]); this.func = function pdfFunctionConstructInterpolatedFunc(args) { - var x = args[0]; + var x = n == 1 ? args[0] : Math.pow(args[0], n); var out = []; for (var j = 0; j < length; ++j) - out.push(c0[j] + (x^n * diff[i])); + out.push(c0[j] + (x * diff[j])); return out; }; diff --git a/test/driver.js b/test/driver.js index 4bc14bf15..7f5aef733 100644 --- a/test/driver.js +++ b/test/driver.js @@ -178,7 +178,7 @@ function snapshotCurrentPage(task, failure) { function sendQuitRequest() { var r = new XMLHttpRequest(); r.open('POST', '/tellMeToQuit?path=' + escape(appPath), false); - r.send(''); + r.send(null); } function quitApp() { diff --git a/test/pdfs/pal-o47.pdf.link b/test/pdfs/pal-o47.pdf.link new file mode 100644 index 000000000..e45c4873d --- /dev/null +++ b/test/pdfs/pal-o47.pdf.link @@ -0,0 +1 @@ +http://www1.cpdl.org/wiki/images/sheet/pal-o47.pdf diff --git a/test/test_manifest.json b/test/test_manifest.json index 43b799bad..3ede43ceb 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -199,6 +199,12 @@ "rounds": 1, "type": "eq" }, + { "id": "pal-o47", + "file": "pdfs/pal-o47.pdf", + "link": true, + "rounds": 1, + "type": "eq" + }, { "id": "simpletype3font", "file": "pdfs/simpletype3font.pdf", "link": false, diff --git a/test/test_slave.html b/test/test_slave.html index 9d8185bb9..51e779c87 100644 --- a/test/test_slave.html +++ b/test/test_slave.html @@ -1,21 +1,27 @@ + - - pdf.js test slave - - - - - - - - - - + + pdf.js test slave + + + + + + + + + + - -

-  

Inflight requests:

-
- + +

+    

Inflight requests:

+
+ + +