mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
Fix MemStream::setPos
This commit is contained in:
@ -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;
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user