Merge pull request #16822 from calixteman/issue16821
[Editor] Don't forget to encrypt image streams (see issue #16821)
This commit is contained in:
commit
4be6c90796
@ -298,7 +298,13 @@ class AnnotationFactory {
|
|||||||
baseFont.set("Encoding", Name.get("WinAnsiEncoding"));
|
baseFont.set("Encoding", Name.get("WinAnsiEncoding"));
|
||||||
const buffer = [];
|
const buffer = [];
|
||||||
baseFontRef = xref.getNewTemporaryRef();
|
baseFontRef = xref.getNewTemporaryRef();
|
||||||
await writeObject(baseFontRef, baseFont, buffer, null);
|
const transform = xref.encrypt
|
||||||
|
? xref.encrypt.createCipherTransform(
|
||||||
|
baseFontRef.num,
|
||||||
|
baseFontRef.gen
|
||||||
|
)
|
||||||
|
: null;
|
||||||
|
await writeObject(baseFontRef, baseFont, buffer, transform);
|
||||||
dependencies.push({ ref: baseFontRef, data: buffer.join("") });
|
dependencies.push({ ref: baseFontRef, data: buffer.join("") });
|
||||||
}
|
}
|
||||||
promises.push(
|
promises.push(
|
||||||
@ -325,13 +331,19 @@ class AnnotationFactory {
|
|||||||
const buffer = [];
|
const buffer = [];
|
||||||
if (smaskStream) {
|
if (smaskStream) {
|
||||||
const smaskRef = xref.getNewTemporaryRef();
|
const smaskRef = xref.getNewTemporaryRef();
|
||||||
await writeObject(smaskRef, smaskStream, buffer, null);
|
const transform = xref.encrypt
|
||||||
|
? xref.encrypt.createCipherTransform(smaskRef.num, smaskRef.gen)
|
||||||
|
: null;
|
||||||
|
await writeObject(smaskRef, smaskStream, buffer, transform);
|
||||||
dependencies.push({ ref: smaskRef, data: buffer.join("") });
|
dependencies.push({ ref: smaskRef, data: buffer.join("") });
|
||||||
imageStream.dict.set("SMask", smaskRef);
|
imageStream.dict.set("SMask", smaskRef);
|
||||||
buffer.length = 0;
|
buffer.length = 0;
|
||||||
}
|
}
|
||||||
const imageRef = (image.imageRef = xref.getNewTemporaryRef());
|
const imageRef = (image.imageRef = xref.getNewTemporaryRef());
|
||||||
await writeObject(imageRef, imageStream, buffer, null);
|
const transform = xref.encrypt
|
||||||
|
? xref.encrypt.createCipherTransform(imageRef.num, imageRef.gen)
|
||||||
|
: null;
|
||||||
|
await writeObject(imageRef, imageStream, buffer, transform);
|
||||||
dependencies.push({ ref: imageRef, data: buffer.join("") });
|
dependencies.push({ ref: imageRef, data: buffer.join("") });
|
||||||
image.imageStream = image.smaskStream = null;
|
image.imageStream = image.smaskStream = null;
|
||||||
}
|
}
|
||||||
|
@ -46,9 +46,6 @@ async function writeDict(dict, buffer, transform) {
|
|||||||
|
|
||||||
async function writeStream(stream, buffer, transform) {
|
async function writeStream(stream, buffer, transform) {
|
||||||
let string = stream.getString();
|
let string = stream.getString();
|
||||||
if (transform !== null) {
|
|
||||||
string = transform.encryptString(string);
|
|
||||||
}
|
|
||||||
const { dict } = stream;
|
const { dict } = stream;
|
||||||
|
|
||||||
const [filter, params] = await Promise.all([
|
const [filter, params] = await Promise.all([
|
||||||
@ -106,6 +103,10 @@ async function writeStream(stream, buffer, transform) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (transform !== null) {
|
||||||
|
string = transform.encryptString(string);
|
||||||
|
}
|
||||||
|
|
||||||
dict.set("Length", string.length);
|
dict.set("Length", string.length);
|
||||||
await writeDict(dict, buffer, transform);
|
await writeDict(dict, buffer, transform);
|
||||||
buffer.push(" stream\n", string, "\nendstream");
|
buffer.push(" stream\n", string, "\nendstream");
|
||||||
|
1
test/pdfs/.gitignore
vendored
1
test/pdfs/.gitignore
vendored
@ -609,3 +609,4 @@
|
|||||||
!annotation_hidden_print.pdf
|
!annotation_hidden_print.pdf
|
||||||
!annotation_hidden_noview.pdf
|
!annotation_hidden_noview.pdf
|
||||||
!widget_hidden_print.pdf
|
!widget_hidden_print.pdf
|
||||||
|
!empty_protected.pdf
|
||||||
|
BIN
test/pdfs/empty_protected.pdf
Executable file
BIN
test/pdfs/empty_protected.pdf
Executable file
Binary file not shown.
@ -8088,5 +8088,36 @@
|
|||||||
"rounds": 1,
|
"rounds": 1,
|
||||||
"link": true,
|
"link": true,
|
||||||
"type": "other"
|
"type": "other"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "protected-stamp-editor-save-print",
|
||||||
|
"file": "pdfs/empty_protected.pdf",
|
||||||
|
"md5": "3a9e0ede729dceb1052bda48db47dca1",
|
||||||
|
"rounds": 1,
|
||||||
|
"type": "eq",
|
||||||
|
"save": true,
|
||||||
|
"print": true,
|
||||||
|
"annotationStorage": {
|
||||||
|
"pdfjs_internal_editor_0": {
|
||||||
|
"annotationType": 13,
|
||||||
|
"pageIndex": 0,
|
||||||
|
"bitmapName": "firefox_logo.png",
|
||||||
|
"bitmapId": "image_c29eaeb9-8839-4a09-bf7c-75a5785805cd_0",
|
||||||
|
"rect": [37.5, 32.406246185302734, 496.5000057220459, 519.1875],
|
||||||
|
"rotation": 0
|
||||||
|
},
|
||||||
|
"pdfjs_internal_editor_1": {
|
||||||
|
"annotationType": 13,
|
||||||
|
"bitmapId": "image_c29eaeb9-8839-4a09-bf7c-75a5785805cd_0",
|
||||||
|
"pageIndex": 0,
|
||||||
|
"rect": [
|
||||||
|
458.06250572204584,
|
||||||
|
473.04686737060547,
|
||||||
|
571.5000057220459,
|
||||||
|
582.7187461853027
|
||||||
|
],
|
||||||
|
"rotation": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
Loading…
Reference in New Issue
Block a user