Merge pull request #14180 from Snuffleupagus/bug-1627427

Handle ranges that "overflow" the last byte in `CMap.mapBfRange` (bug 1627427)
This commit is contained in:
Tim van der Meij 2021-10-27 20:06:09 +02:00 committed by GitHub
commit 0e7614df7f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 34 additions and 3 deletions

View File

@ -242,10 +242,17 @@ class CMap {
const lastByte = dstLow.length - 1;
while (low <= high) {
this._map[low++] = dstLow;
// Only the last byte has to be incremented.
// Only the last byte has to be incremented (in the normal case).
const nextCharCode = dstLow.charCodeAt(lastByte) + 1;
if (nextCharCode > 0xff) {
dstLow =
dstLow.substring(0, lastByte - 1) +
String.fromCharCode(dstLow.charCodeAt(lastByte - 1) + 1) +
"\x00";
continue;
}
dstLow =
dstLow.substring(0, lastByte) +
String.fromCharCode(dstLow.charCodeAt(lastByte) + 1);
dstLow.substring(0, lastByte) + String.fromCharCode(nextCharCode);
}
}

View File

@ -338,6 +338,7 @@
!noembed-jis7.pdf
!issue12504.pdf
!noembed-eucjp.pdf
!bug1627427_reduced.pdf
!noembed-sjis.pdf
!vertical.pdf
!issue13343.pdf

Binary file not shown.

View File

@ -3022,6 +3022,13 @@
"rounds": 1,
"type": "eq"
},
{ "id": "bug1627427",
"file": "pdfs/bug1627427_reduced.pdf",
"md5": "3ff75fcf455af49803f0f04eb071bdc3",
"link": false,
"rounds": 1,
"type": "text"
},
{ "id": "issue8586",
"file": "pdfs/issue8586.pdf",
"md5": "16b5230364017d3b0d2d65978eb35816",

View File

@ -1760,6 +1760,22 @@ sources, for full support with Dvips.`)
await loadingTask.destroy();
});
it("gets text content, with beginbfrange operator handled correctly (bug 1627427)", async function () {
const loadingTask = getDocument(
buildGetDocumentParams("bug1627427_reduced.pdf")
);
const pdfDoc = await loadingTask.promise;
const pdfPage = await pdfDoc.getPage(1);
const { items } = await pdfPage.getTextContent();
const text = mergeText(items);
expect(text).toEqual(
"침하게 흐린 품이 눈이 올 듯하더니 눈은 아니 오고 얼다가 만 비가 추"
);
await loadingTask.destroy();
});
it("gets empty structure tree", async function () {
const tree = await page.getStructTree();