Merge pull request #17374 from calixteman/bug1865341

[Editor] Avoid conflicts between new persistent refs and the ones created when saving (bug 1865341)
This commit is contained in:
calixteman 2023-12-05 14:50:15 +01:00 committed by GitHub
commit 7f04ce4d22
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 52 additions and 0 deletions

View File

@ -419,6 +419,10 @@ function getFontSubstitution(
baseFontName,
standardFontName
) {
if (baseFontName.startsWith("InvalidPDFjsFont_")) {
return null;
}
// It's possible to have a font name with spaces, commas or dashes, hence we
// just replace them by a dash.
baseFontName = normalizeFontName(baseFontName);

View File

@ -44,6 +44,7 @@ class XRef {
this._pendingRefs = new RefSet();
this._newPersistentRefNum = null;
this._newTemporaryRefNum = null;
this._persistentRefsCache = null;
}
getNewPersistentRef(obj) {
@ -63,6 +64,19 @@ class XRef {
// stream.
if (this._newTemporaryRefNum === null) {
this._newTemporaryRefNum = this.entries.length || 1;
if (this._newPersistentRefNum) {
this._persistentRefsCache = new Map();
for (
let i = this._newTemporaryRefNum;
i < this._newPersistentRefNum;
i++
) {
// We *temporarily* clear the cache, see `resetNewTemporaryRef` below,
// to avoid any conflict with the refs created during saving.
this._persistentRefsCache.set(i, this._cacheMap.get(i));
this._cacheMap.delete(i);
}
}
}
return Ref.get(this._newTemporaryRefNum++, 0);
}
@ -70,6 +84,12 @@ class XRef {
resetNewTemporaryRef() {
// Called once saving is finished.
this._newTemporaryRefNum = null;
if (this._persistentRefsCache) {
for (const [num, obj] of this._persistentRefsCache) {
this._cacheMap.set(num, obj);
}
}
this._persistentRefsCache = null;
}
setStartXRef(startXRef) {

View File

@ -656,6 +656,12 @@ class Driver {
if (!task.annotationStorage) {
throw new Error("Missing `annotationStorage` entry.");
}
if (task.loadAnnotations) {
for (let num = 1; num <= doc.numPages; num++) {
const page = await doc.getPage(num);
await page.getAnnotations({ intent: "display" });
}
}
doc.annotationStorage.setAll(task.annotationStorage);
const data = await doc.saveDocument();

View File

@ -619,3 +619,4 @@
!issue17069.pdf
!issue17215.pdf
!bug1863910.pdf
!bug1865341.pdf

BIN
test/pdfs/bug1865341.pdf Executable file

Binary file not shown.

View File

@ -8381,5 +8381,26 @@
"link": true,
"type": "eq",
"annotations": true
},
{
"id": "bug1865341",
"file": "pdfs/bug1865341.pdf",
"md5": "e241b6d1dc493df73e77e3eeabc71721",
"rounds": 1,
"type": "eq",
"save": true,
"print": true,
"loadAnnotations": true,
"annotationStorage": {
"pdfjs_internal_editor_0": {
"annotationType": 3,
"color": [255, 0, 0],
"fontSize": 10,
"value": "Załącznik",
"pageIndex": 0,
"rect": [ 238, 629, 287, 649],
"rotation": 0
}
}
}
]