mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
Allow the OP_Column opcode to read rows that are larger than
SQLITE_LIMIT_LENGTH as long as the specific field being read out is less than or equal to SQLITE_LIMIT_LENGTH. FossilOrigin-Name: 1bf4848995ab094ad84ef4aa1563bce641d5acf7335fb4630c892b16cf7d7edd
This commit is contained in:
@@ -2727,15 +2727,11 @@ op_column_restart:
|
||||
pC->aRow = sqlite3BtreePayloadFetch(pCrsr, &pC->szRow);
|
||||
assert( pC->szRow<=pC->payloadSize );
|
||||
assert( pC->szRow<=65536 ); /* Maximum page size is 64KiB */
|
||||
if( pC->payloadSize > (u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){
|
||||
goto too_big;
|
||||
}
|
||||
}
|
||||
pC->cacheStatus = p->cacheCtr;
|
||||
pC->iHdrOffset = getVarint32(pC->aRow, aOffset[0]);
|
||||
pC->nHdrParsed = 0;
|
||||
|
||||
|
||||
if( pC->szRow<aOffset[0] ){ /*OPTIMIZATION-IF-FALSE*/
|
||||
/* pC->aRow does not have to hold the entire row, but it does at least
|
||||
** need to cover the header of the record. If pC->aRow does not contain
|
||||
@@ -2888,6 +2884,7 @@ op_column_restart:
|
||||
pDest->n = len = (t-12)/2;
|
||||
pDest->enc = encoding;
|
||||
if( pDest->szMalloc < len+2 ){
|
||||
if( len>db->aLimit[SQLITE_LIMIT_LENGTH] ) goto too_big;
|
||||
pDest->flags = MEM_Null;
|
||||
if( sqlite3VdbeMemGrow(pDest, len+2, 0) ) goto no_mem;
|
||||
}else{
|
||||
@@ -2920,6 +2917,7 @@ op_column_restart:
|
||||
*/
|
||||
sqlite3VdbeSerialGet((u8*)sqlite3CtypeMap, t, pDest);
|
||||
}else{
|
||||
if( len>db->aLimit[SQLITE_LIMIT_LENGTH] ) goto too_big;
|
||||
rc = sqlite3VdbeMemFromBtree(pC->uc.pCursor, aOffset[p2], len, pDest);
|
||||
if( rc!=SQLITE_OK ) goto abort_due_to_error;
|
||||
sqlite3VdbeSerialGet((const u8*)pDest->z, t, pDest);
|
||||
|
Reference in New Issue
Block a user