diff --git a/src/core/default_appearance.js b/src/core/default_appearance.js index 2b7eba5e6..7f55229dc 100644 --- a/src/core/default_appearance.js +++ b/src/core/default_appearance.js @@ -37,13 +37,17 @@ class DefaultAppearanceEvaluator extends EvaluatorPreprocessor { }; try { - while (this.read(operation)) { - if (this.stateManager.stateStack.length !== 0) { - // Don't get info in save/restore sections. - args.length = 0; - continue; + while (true) { + operation.args.length = 0; // Ensure that `args` it's always reset. + + if (!this.read(operation)) { + break; + } + if (this.savedStatesDepth !== 0) { + continue; // Don't get info in save/restore sections. } const { fn, args } = operation; + switch (fn | 0) { case OPS.setFont: const [fontName, fontSize] = args; @@ -64,7 +68,6 @@ class DefaultAppearanceEvaluator extends EvaluatorPreprocessor { ColorSpace.singletons.cmyk.getRgbItem(args, 0, result.fontColor, 0); break; } - args.length = 0; } } catch (reason) { warn(`parseDefaultAppearance - ignoring errors: "${reason}".`); diff --git a/test/unit/default_appearance_spec.js b/test/unit/default_appearance_spec.js index 53ba81f5e..36269c3c4 100644 --- a/test/unit/default_appearance_spec.js +++ b/test/unit/default_appearance_spec.js @@ -33,7 +33,7 @@ describe("Default appearance", function () { expect( parseDefaultAppearance( - " 0.1 0.2 0.3 rg /FontName 12 Tf 0.3 0.2 0.1 rg /NameFont 13 Tf" + "0.1 0.2 0.3 rg /FontName 12 Tf 0.3 0.2 0.1 rg /NameFont 13 Tf" ) ).toEqual({ fontSize: 13, @@ -44,7 +44,7 @@ describe("Default appearance", function () { it("should parse default appearance with save/restore", function () { const da = - "0.10 0.20 0.30 rg /FontName 12 Tf q 0.30 0.20 0.10 rg /NameFont 13 Tf Q"; + "q Q 0.10 0.20 0.30 rg /FontName 12 Tf q 0.30 0.20 0.10 rg /NameFont 13 Tf Q"; expect(parseDefaultAppearance(da)).toEqual({ fontSize: 12, fontName: Name.get("FontName"),