Update the current stride before composing when decoding a text region
Fixes #17871. We do something similar to: https://source.chromium.org/chromium/chromium/src/+/main:third_party/pdfium/core/fxcodec/jbig2/JBig2_TrdProc.cpp;l=373-379;drc=24c6be6924df3ff585bb63f6aed4e2c81e791fb2
This commit is contained in:
parent
d8331e3100
commit
3f2f98336e
@ -865,6 +865,20 @@ function decodeTextRegion(
|
|||||||
decodingContext
|
decodingContext
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let increment = 0;
|
||||||
|
if (!transposed) {
|
||||||
|
if (referenceCorner > 1) {
|
||||||
|
currentS += symbolWidth - 1;
|
||||||
|
} else {
|
||||||
|
increment = symbolWidth - 1;
|
||||||
|
}
|
||||||
|
} else if (!(referenceCorner & 1)) {
|
||||||
|
currentS += symbolHeight - 1;
|
||||||
|
} else {
|
||||||
|
increment = symbolHeight - 1;
|
||||||
|
}
|
||||||
|
|
||||||
const offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1);
|
const offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1);
|
||||||
const offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0);
|
const offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0);
|
||||||
let s2, t2, symbolRow;
|
let s2, t2, symbolRow;
|
||||||
@ -896,7 +910,6 @@ function decodeTextRegion(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
currentS += symbolHeight - 1;
|
|
||||||
} else {
|
} else {
|
||||||
for (t2 = 0; t2 < symbolHeight; t2++) {
|
for (t2 = 0; t2 < symbolHeight; t2++) {
|
||||||
row = bitmap[offsetT + t2];
|
row = bitmap[offsetT + t2];
|
||||||
@ -921,7 +934,6 @@ function decodeTextRegion(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
currentS += symbolWidth - 1;
|
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
const deltaS = huffman
|
const deltaS = huffman
|
||||||
@ -930,7 +942,7 @@ function decodeTextRegion(
|
|||||||
if (deltaS === null) {
|
if (deltaS === null) {
|
||||||
break; // OOB
|
break; // OOB
|
||||||
}
|
}
|
||||||
currentS += deltaS + dsOffset;
|
currentS += increment + deltaS + dsOffset;
|
||||||
} while (true);
|
} while (true);
|
||||||
}
|
}
|
||||||
return bitmap;
|
return bitmap;
|
||||||
|
|||||||
2
test/pdfs/.gitignore
vendored
2
test/pdfs/.gitignore
vendored
@ -637,3 +637,5 @@
|
|||||||
!issue17730.pdf
|
!issue17730.pdf
|
||||||
!bug1883609.pdf
|
!bug1883609.pdf
|
||||||
!issue17808.pdf
|
!issue17808.pdf
|
||||||
|
!issue17871_bottom_right.pdf
|
||||||
|
!issue17871_top_right.pdf
|
||||||
|
|||||||
BIN
test/pdfs/issue17871_bottom_right.pdf
Executable file
BIN
test/pdfs/issue17871_bottom_right.pdf
Executable file
Binary file not shown.
BIN
test/pdfs/issue17871_top_right.pdf
Executable file
BIN
test/pdfs/issue17871_top_right.pdf
Executable file
Binary file not shown.
@ -9801,5 +9801,19 @@
|
|||||||
"md5": "dd66194bdaa0f62bc96c760384f2e098",
|
"md5": "dd66194bdaa0f62bc96c760384f2e098",
|
||||||
"rounds": 1,
|
"rounds": 1,
|
||||||
"type": "eq"
|
"type": "eq"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "issue17871_bottom_right",
|
||||||
|
"file": "pdfs/issue17871_bottom_right.pdf",
|
||||||
|
"md5": "664807166c5279224abfbf259f701958",
|
||||||
|
"rounds": 1,
|
||||||
|
"type": "eq"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "issue17871_top_right",
|
||||||
|
"file": "pdfs/issue17871_top_right.pdf",
|
||||||
|
"md5": "07d95eabf18aee0cf38f09eb7b1390ec",
|
||||||
|
"rounds": 1,
|
||||||
|
"type": "eq"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user