mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-12 13:01:09 +03:00
In an ORDER BY LIMIT, make sure the ORDER BY expression evaluator does not
try to reuse values from the result set if the result set has not yet be computed. This fixes a bug in the recent deferred-row loading optimization, check-in [c381f0ea57002a264fd958b28e]. OSSFuzz discovered the problem. FossilOrigin-Name: 5d61e75f32de09c81dbe844443209f063cccb005d60b846900de5b023643fc3b
This commit is contained in:
@@ -627,9 +627,10 @@ static void pushOntoSorter(
|
||||
** case regData==regOrigData.
|
||||
** (3) Some output columns are omitted from the sort record due to
|
||||
** the SQLITE_ENABLE_SORTER_REFERENCE optimization, or due to the
|
||||
** SQLITE_ECEL_OMITREF optimization. In that case, regOrigData==0
|
||||
** to prevent this routine from trying to copy values that might
|
||||
** not exist.
|
||||
** SQLITE_ECEL_OMITREF optimization, or due to the
|
||||
** SortCtx.pDeferredRowLoad optimiation. In any of these cases
|
||||
** regOrigData is 0 to prevent this routine from trying to copy
|
||||
** values that might not yet exist.
|
||||
*/
|
||||
assert( nData==1 || regData==regOrigData || regOrigData==0 );
|
||||
|
||||
@@ -1010,6 +1011,7 @@ static void selectInnerLoop(
|
||||
assert( pSort!=0 );
|
||||
assert( hasDistinct==0 );
|
||||
pSort->pDeferredRowLoad = &sRowLoadInfo;
|
||||
regOrig = 0;
|
||||
}else{
|
||||
innerLoopLoadRow(pParse, p, &sRowLoadInfo);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user