diff --git a/src/core/evaluator.js b/src/core/evaluator.js index 45cd1a070..e92e243f8 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -4463,21 +4463,30 @@ class TranslatedFont { "Type3 glyph shall start with the d1 operator." ); } - if (isEmptyBBox) { + const charBBox = Util.normalizeRect(operatorList.argsArray[0].slice(2)), + width = charBBox[2] - charBBox[0], + height = charBBox[3] - charBBox[1]; + + if (width === 0 || height === 0) { + // Skip the d1 operator when its bounds are bogus (fixes issue14953.pdf). + operatorList.fnArray.splice(0, 1); + operatorList.argsArray.splice(0, 1); + } else if (isEmptyBBox) { if (!this._bbox) { this._bbox = [Infinity, Infinity, -Infinity, -Infinity]; } - const charBBox = Util.normalizeRect(operatorList.argsArray[0].slice(2)); - this._bbox[0] = Math.min(this._bbox[0], charBBox[0]); this._bbox[1] = Math.min(this._bbox[1], charBBox[1]); this._bbox[2] = Math.max(this._bbox[2], charBBox[2]); this._bbox[3] = Math.max(this._bbox[3], charBBox[3]); } - let i = 1, + + let i = 0, ii = operatorList.length; while (i < ii) { switch (operatorList.fnArray[i]) { + case OPS.setCharWidthAndBounds: + break; // Handled above. case OPS.setStrokeColorSpace: case OPS.setFillColorSpace: case OPS.setStrokeColor: diff --git a/src/display/canvas.js b/src/display/canvas.js index 469cc588b..886ac2ec5 100644 --- a/src/display/canvas.js +++ b/src/display/canvas.js @@ -2652,8 +2652,6 @@ class CanvasGraphics { } setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { - // TODO According to the spec we're also suppose to ignore any operators - // that set color or include images while processing this type3 font. this.ctx.rect(llx, lly, urx - llx, ury - lly); this.ctx.clip(); this.endPath(); diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index e11b5f45d..f78a3384c 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -49,6 +49,7 @@ !issue7426.pdf !issue7439.pdf !issue7847_radial.pdf +!issue14953.pdf !issue7446.pdf !issue7492.pdf !issue7544.pdf diff --git a/test/pdfs/issue14953.pdf b/test/pdfs/issue14953.pdf new file mode 100644 index 000000000..0573dbec8 Binary files /dev/null and b/test/pdfs/issue14953.pdf differ diff --git a/test/test_manifest.json b/test/test_manifest.json index b46951ab9..8fd040b75 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -2058,6 +2058,12 @@ "rounds": 1, "type": "eq" }, + { "id": "issue14953", + "file": "pdfs/issue14953.pdf", + "md5": "dd7d6cb92e58d75a0eb8c0476a3bc64a", + "rounds": 1, + "type": "eq" + }, { "id": "extgstate-text", "file": "pdfs/extgstate.pdf", "md5": "001bb4ec04463a01d93aad748361f049",