[EMAIL PROTECTED] wrote:
> This was likely a typo.  In its current state, it's accessing uninitialized
> memory.  It looks like it's conceivable that an incorrect nextRowid could be
> later used if the uninitialized value happens to be a small integer (smaller
> than pC->nextRowid) and the "valid" flag therefore doesn't get set to false.
> 
> --- vdbe.c~   2005-12-19 12:42:25.000000000 -0500
> +++ vdbe.c    2006-10-22 16:32:45.000000000 -0400
> @@ -2937,7 +2937,7 @@
>        if( pOp->p2 & OPFLAG_NCHANGE ) db->nChange++;
>        if( pOp->p2 & OPFLAG_LASTROWID ) db->lastRowid = pNos->i;
>        if( pOp->p2 & OPFLAG_CSCHANGE ) db->csChange++;
> -      if( pC->nextRowidValid && pTos->i>=pC->nextRowid ){
> +      if( pC->nextRowidValid && pNos->i>=pC->nextRowid ){
>          pC->nextRowidValid = 0;
>        }
>      }
> 

As it happens, pC->nextRowidValid is always false in this
context, as far as I can tell, so the pTos->i variable is
never accessed.  The fix checked in was to remove the test
altogether and unconditionally set pC->nextRowidValid to 0.

Because the code is unreachable, this fix does not require
a new release of SQLite 2.8.

--
D. Richard Hipp  <[EMAIL PROTECTED]>


-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to