1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-01 06:27:03 +03:00

Fix a memory management problem in lsm log recovery code.

FossilOrigin-Name: dd55af30b4440bba1b97c2155b9f499d791cd7d8bae8341972c41439fdc41edc
This commit is contained in:
dan
2017-07-01 20:59:06 +00:00
parent c7b1ee5f6e
commit 24f6904e99
3 changed files with 12 additions and 9 deletions

View File

@ -868,12 +868,14 @@ static void logReaderBlob(
}else{
int nCopy = LSM_MIN(nAvail, nReq);
if( nBlob==nReq ){
if( ppBlob ) *ppBlob = (u8 *)pBuf->z;
pBuf->n = 0;
}
rc = lsmStringBinAppend(pBuf, (u8 *)&p->buf.z[p->iBuf], nCopy);
nReq -= nCopy;
p->iBuf += nCopy;
if( nReq==0 && ppBlob ){
*ppBlob = (u8*)pBuf->z;
}
}
}
@ -915,6 +917,7 @@ static void logReaderCksum(LogReader *p, LsmString *pBuf, int *pbEof, int *pRc){
logCksumUnaligned(&p->buf.z[p->iCksumBuf], nCksum, &p->cksum0, &p->cksum1);
p->iCksumBuf = p->iBuf + 8;
logReaderBlob(p, pBuf, 8, &pPtr, pRc);
assert( pPtr || *pRc );
/* Read the checksums from the log file. Set *pbEof if they do not match. */
if( pPtr ){