Fix MemStream::setPos

This commit is contained in:
Svetlana Kulikova
2024-02-15 17:20:57 +03:00
parent 2f4fee3555
commit 5c69cb0358
2 changed files with 9 additions and 5 deletions

View File

@ -989,7 +989,9 @@ void MemStream::setPos(GFileOffset pos, int dir) {
} else {
i = (Guint)(start + length - pos);
}
if (i < start) {
if (dir < 0 && start + length < pos) {
i = 0;
} else if (i < start) {
i = start;
} else if (i > start + length) {
i = start + length;

View File

@ -419,9 +419,12 @@ GFileOffset XRef::getStartXref() {
nTry = 1;
bFind = false;
str->setPos(xrefSearchSize * nTry, -1);
while ((n = str->getBlock(buf, xrefSearchSize)) > 0)
bool isBreak = false;
do
{
str->setPos(xrefSearchSize * nTry, -1);
isBreak = str->getPos() == 0;
n = str->getBlock(buf, xrefSearchSize);
buf[n] = '\0';
// find startxref
@ -436,8 +439,7 @@ GFileOffset XRef::getStartXref() {
break;
}
nTry++;
str->setPos(xrefSearchSize * nTry, -1);
}
} while (!isBreak);
// read last xrefSearchSize bytes