Ensure that EvaluatorPreprocessor.opMap has a null-prototype (issue 17554)

This accidentally regressed in PR 16956, sorry about that!
This commit is contained in:
Jonas Jenwald 2024-01-21 19:50:06 +01:00
parent fce822cde0
commit d7e41d4cb6
4 changed files with 191 additions and 108 deletions

View File

@ -4780,124 +4780,128 @@ class EvaluatorPreprocessor {
// //
// If variableArgs === true: [0, `numArgs`] expected // If variableArgs === true: [0, `numArgs`] expected
// If variableArgs === false: exactly `numArgs` expected // If variableArgs === false: exactly `numArgs` expected
return shadow(this, "opMap", { return shadow(
// Graphic state this,
w: { id: OPS.setLineWidth, numArgs: 1, variableArgs: false }, "opMap",
J: { id: OPS.setLineCap, numArgs: 1, variableArgs: false }, Object.assign(Object.create(null), {
j: { id: OPS.setLineJoin, numArgs: 1, variableArgs: false }, // Graphic state
M: { id: OPS.setMiterLimit, numArgs: 1, variableArgs: false }, w: { id: OPS.setLineWidth, numArgs: 1, variableArgs: false },
d: { id: OPS.setDash, numArgs: 2, variableArgs: false }, J: { id: OPS.setLineCap, numArgs: 1, variableArgs: false },
ri: { id: OPS.setRenderingIntent, numArgs: 1, variableArgs: false }, j: { id: OPS.setLineJoin, numArgs: 1, variableArgs: false },
i: { id: OPS.setFlatness, numArgs: 1, variableArgs: false }, M: { id: OPS.setMiterLimit, numArgs: 1, variableArgs: false },
gs: { id: OPS.setGState, numArgs: 1, variableArgs: false }, d: { id: OPS.setDash, numArgs: 2, variableArgs: false },
q: { id: OPS.save, numArgs: 0, variableArgs: false }, ri: { id: OPS.setRenderingIntent, numArgs: 1, variableArgs: false },
Q: { id: OPS.restore, numArgs: 0, variableArgs: false }, i: { id: OPS.setFlatness, numArgs: 1, variableArgs: false },
cm: { id: OPS.transform, numArgs: 6, variableArgs: false }, gs: { id: OPS.setGState, numArgs: 1, variableArgs: false },
q: { id: OPS.save, numArgs: 0, variableArgs: false },
Q: { id: OPS.restore, numArgs: 0, variableArgs: false },
cm: { id: OPS.transform, numArgs: 6, variableArgs: false },
// Path // Path
m: { id: OPS.moveTo, numArgs: 2, variableArgs: false }, m: { id: OPS.moveTo, numArgs: 2, variableArgs: false },
l: { id: OPS.lineTo, numArgs: 2, variableArgs: false }, l: { id: OPS.lineTo, numArgs: 2, variableArgs: false },
c: { id: OPS.curveTo, numArgs: 6, variableArgs: false }, c: { id: OPS.curveTo, numArgs: 6, variableArgs: false },
v: { id: OPS.curveTo2, numArgs: 4, variableArgs: false }, v: { id: OPS.curveTo2, numArgs: 4, variableArgs: false },
y: { id: OPS.curveTo3, numArgs: 4, variableArgs: false }, y: { id: OPS.curveTo3, numArgs: 4, variableArgs: false },
h: { id: OPS.closePath, numArgs: 0, variableArgs: false }, h: { id: OPS.closePath, numArgs: 0, variableArgs: false },
re: { id: OPS.rectangle, numArgs: 4, variableArgs: false }, re: { id: OPS.rectangle, numArgs: 4, variableArgs: false },
S: { id: OPS.stroke, numArgs: 0, variableArgs: false }, S: { id: OPS.stroke, numArgs: 0, variableArgs: false },
s: { id: OPS.closeStroke, numArgs: 0, variableArgs: false }, s: { id: OPS.closeStroke, numArgs: 0, variableArgs: false },
f: { id: OPS.fill, numArgs: 0, variableArgs: false }, f: { id: OPS.fill, numArgs: 0, variableArgs: false },
F: { id: OPS.fill, numArgs: 0, variableArgs: false }, F: { id: OPS.fill, numArgs: 0, variableArgs: false },
"f*": { id: OPS.eoFill, numArgs: 0, variableArgs: false }, "f*": { id: OPS.eoFill, numArgs: 0, variableArgs: false },
B: { id: OPS.fillStroke, numArgs: 0, variableArgs: false }, B: { id: OPS.fillStroke, numArgs: 0, variableArgs: false },
"B*": { id: OPS.eoFillStroke, numArgs: 0, variableArgs: false }, "B*": { id: OPS.eoFillStroke, numArgs: 0, variableArgs: false },
b: { id: OPS.closeFillStroke, numArgs: 0, variableArgs: false }, b: { id: OPS.closeFillStroke, numArgs: 0, variableArgs: false },
"b*": { id: OPS.closeEOFillStroke, numArgs: 0, variableArgs: false }, "b*": { id: OPS.closeEOFillStroke, numArgs: 0, variableArgs: false },
n: { id: OPS.endPath, numArgs: 0, variableArgs: false }, n: { id: OPS.endPath, numArgs: 0, variableArgs: false },
// Clipping // Clipping
W: { id: OPS.clip, numArgs: 0, variableArgs: false }, W: { id: OPS.clip, numArgs: 0, variableArgs: false },
"W*": { id: OPS.eoClip, numArgs: 0, variableArgs: false }, "W*": { id: OPS.eoClip, numArgs: 0, variableArgs: false },
// Text // Text
BT: { id: OPS.beginText, numArgs: 0, variableArgs: false }, BT: { id: OPS.beginText, numArgs: 0, variableArgs: false },
ET: { id: OPS.endText, numArgs: 0, variableArgs: false }, ET: { id: OPS.endText, numArgs: 0, variableArgs: false },
Tc: { id: OPS.setCharSpacing, numArgs: 1, variableArgs: false }, Tc: { id: OPS.setCharSpacing, numArgs: 1, variableArgs: false },
Tw: { id: OPS.setWordSpacing, numArgs: 1, variableArgs: false }, Tw: { id: OPS.setWordSpacing, numArgs: 1, variableArgs: false },
Tz: { id: OPS.setHScale, numArgs: 1, variableArgs: false }, Tz: { id: OPS.setHScale, numArgs: 1, variableArgs: false },
TL: { id: OPS.setLeading, numArgs: 1, variableArgs: false }, TL: { id: OPS.setLeading, numArgs: 1, variableArgs: false },
Tf: { id: OPS.setFont, numArgs: 2, variableArgs: false }, Tf: { id: OPS.setFont, numArgs: 2, variableArgs: false },
Tr: { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false }, Tr: { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false },
Ts: { id: OPS.setTextRise, numArgs: 1, variableArgs: false }, Ts: { id: OPS.setTextRise, numArgs: 1, variableArgs: false },
Td: { id: OPS.moveText, numArgs: 2, variableArgs: false }, Td: { id: OPS.moveText, numArgs: 2, variableArgs: false },
TD: { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false }, TD: { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false },
Tm: { id: OPS.setTextMatrix, numArgs: 6, variableArgs: false }, Tm: { id: OPS.setTextMatrix, numArgs: 6, variableArgs: false },
"T*": { id: OPS.nextLine, numArgs: 0, variableArgs: false }, "T*": { id: OPS.nextLine, numArgs: 0, variableArgs: false },
Tj: { id: OPS.showText, numArgs: 1, variableArgs: false }, Tj: { id: OPS.showText, numArgs: 1, variableArgs: false },
TJ: { id: OPS.showSpacedText, numArgs: 1, variableArgs: false }, TJ: { id: OPS.showSpacedText, numArgs: 1, variableArgs: false },
"'": { id: OPS.nextLineShowText, numArgs: 1, variableArgs: false }, "'": { id: OPS.nextLineShowText, numArgs: 1, variableArgs: false },
'"': { '"': {
id: OPS.nextLineSetSpacingShowText, id: OPS.nextLineSetSpacingShowText,
numArgs: 3, numArgs: 3,
variableArgs: false, variableArgs: false,
}, },
// Type3 fonts // Type3 fonts
d0: { id: OPS.setCharWidth, numArgs: 2, variableArgs: false }, d0: { id: OPS.setCharWidth, numArgs: 2, variableArgs: false },
d1: { d1: {
id: OPS.setCharWidthAndBounds, id: OPS.setCharWidthAndBounds,
numArgs: 6, numArgs: 6,
variableArgs: false, variableArgs: false,
}, },
// Color // Color
CS: { id: OPS.setStrokeColorSpace, numArgs: 1, variableArgs: false }, CS: { id: OPS.setStrokeColorSpace, numArgs: 1, variableArgs: false },
cs: { id: OPS.setFillColorSpace, numArgs: 1, variableArgs: false }, cs: { id: OPS.setFillColorSpace, numArgs: 1, variableArgs: false },
SC: { id: OPS.setStrokeColor, numArgs: 4, variableArgs: true }, SC: { id: OPS.setStrokeColor, numArgs: 4, variableArgs: true },
SCN: { id: OPS.setStrokeColorN, numArgs: 33, variableArgs: true }, SCN: { id: OPS.setStrokeColorN, numArgs: 33, variableArgs: true },
sc: { id: OPS.setFillColor, numArgs: 4, variableArgs: true }, sc: { id: OPS.setFillColor, numArgs: 4, variableArgs: true },
scn: { id: OPS.setFillColorN, numArgs: 33, variableArgs: true }, scn: { id: OPS.setFillColorN, numArgs: 33, variableArgs: true },
G: { id: OPS.setStrokeGray, numArgs: 1, variableArgs: false }, G: { id: OPS.setStrokeGray, numArgs: 1, variableArgs: false },
g: { id: OPS.setFillGray, numArgs: 1, variableArgs: false }, g: { id: OPS.setFillGray, numArgs: 1, variableArgs: false },
RG: { id: OPS.setStrokeRGBColor, numArgs: 3, variableArgs: false }, RG: { id: OPS.setStrokeRGBColor, numArgs: 3, variableArgs: false },
rg: { id: OPS.setFillRGBColor, numArgs: 3, variableArgs: false }, rg: { id: OPS.setFillRGBColor, numArgs: 3, variableArgs: false },
K: { id: OPS.setStrokeCMYKColor, numArgs: 4, variableArgs: false }, K: { id: OPS.setStrokeCMYKColor, numArgs: 4, variableArgs: false },
k: { id: OPS.setFillCMYKColor, numArgs: 4, variableArgs: false }, k: { id: OPS.setFillCMYKColor, numArgs: 4, variableArgs: false },
// Shading // Shading
sh: { id: OPS.shadingFill, numArgs: 1, variableArgs: false }, sh: { id: OPS.shadingFill, numArgs: 1, variableArgs: false },
// Images // Images
BI: { id: OPS.beginInlineImage, numArgs: 0, variableArgs: false }, BI: { id: OPS.beginInlineImage, numArgs: 0, variableArgs: false },
ID: { id: OPS.beginImageData, numArgs: 0, variableArgs: false }, ID: { id: OPS.beginImageData, numArgs: 0, variableArgs: false },
EI: { id: OPS.endInlineImage, numArgs: 1, variableArgs: false }, EI: { id: OPS.endInlineImage, numArgs: 1, variableArgs: false },
// XObjects // XObjects
Do: { id: OPS.paintXObject, numArgs: 1, variableArgs: false }, Do: { id: OPS.paintXObject, numArgs: 1, variableArgs: false },
MP: { id: OPS.markPoint, numArgs: 1, variableArgs: false }, MP: { id: OPS.markPoint, numArgs: 1, variableArgs: false },
DP: { id: OPS.markPointProps, numArgs: 2, variableArgs: false }, DP: { id: OPS.markPointProps, numArgs: 2, variableArgs: false },
BMC: { id: OPS.beginMarkedContent, numArgs: 1, variableArgs: false }, BMC: { id: OPS.beginMarkedContent, numArgs: 1, variableArgs: false },
BDC: { BDC: {
id: OPS.beginMarkedContentProps, id: OPS.beginMarkedContentProps,
numArgs: 2, numArgs: 2,
variableArgs: false, variableArgs: false,
}, },
EMC: { id: OPS.endMarkedContent, numArgs: 0, variableArgs: false }, EMC: { id: OPS.endMarkedContent, numArgs: 0, variableArgs: false },
// Compatibility // Compatibility
BX: { id: OPS.beginCompat, numArgs: 0, variableArgs: false }, BX: { id: OPS.beginCompat, numArgs: 0, variableArgs: false },
EX: { id: OPS.endCompat, numArgs: 0, variableArgs: false }, EX: { id: OPS.endCompat, numArgs: 0, variableArgs: false },
// (reserved partial commands for the lexer) // (reserved partial commands for the lexer)
BM: null, BM: null,
BD: null, BD: null,
true: null, true: null,
fa: null, fa: null,
fal: null, fal: null,
fals: null, fals: null,
false: null, false: null,
nu: null, nu: null,
nul: null, nul: null,
null: null, null: null,
}); })
);
} }
static MAX_INVALID_PATH_OPS = 10; static MAX_INVALID_PATH_OPS = 10;

View File

@ -300,6 +300,7 @@
!helloworld-bad.pdf !helloworld-bad.pdf
!zerowidthline.pdf !zerowidthline.pdf
!colorspace_cos.pdf !colorspace_cos.pdf
!issue17554.pdf
!issue13242.pdf !issue13242.pdf
!js-colors.pdf !js-colors.pdf
!annotation-line-without-appearance-empty-Rect.pdf !annotation-line-without-appearance-empty-Rect.pdf

71
test/pdfs/issue17554.pdf Normal file
View File

@ -0,0 +1,71 @@
%PDF-1.4
%%EOF
6 0 obj
<<
/Type /Catalog
/Pages 5 0 R
>>
endobj
1 0 obj
<<
/Type /Page
/Parent 5 0 R
/MediaBox [ 0 0 612 792 ]
/Resources 3 0 R
/Contents 2 0 R
>>
endobj
4 0 obj
<<
/Type /Font
/Subtype /Type1
/Name /F1
/BaseFont/Helvetica
>>
endobj
2 0 obj
<<
/Length 53
>>
stream
toString
endstream
endobj
5 0 obj
<<
/Type /Pages
/Kids [ 1 0 R ]
/Count 1
>>
endobj
3 0 obj
<<
/ProcSet[/PDF/Text]
/Font <</F1 4 0 R >>
>>
endobj
xref
0 7
0000000000 65535 f
0000000060 00000 n
0000000228 00000 n
0000000424 00000 n
0000000145 00000 n
0000000333 00000 n
0000000009 00000 n
trailer
<<
/Size 7
/Root 6 0 R
>>
startxref
488
%%EOF

View File

@ -8762,6 +8762,13 @@
} }
} }
}, },
{
"id": "issue17554",
"file": "pdfs/issue17554.pdf",
"md5": "09607e5c6007b28b4e75bf8c38a60de3",
"rounds": 1,
"type": "load"
},
{ {
"id": "freetexts-delete-editor-print", "id": "freetexts-delete-editor-print",
"file": "pdfs/freetexts.pdf", "file": "pdfs/freetexts.pdf",