On 08/20/2013 09:08 PM, Ashok Pitambar wrote:
Hi Richard,

          If list of available buffers (*db->lookaside.pFree*)  is NULL and
it is assigned
to pBuf and if you access  pBuf->pNext it will crash. read my comments in
below code
snippet.

             There is good chance that sqlite may end up with empty
lookaside pool(*db->lookaside.pFree*) list when there were many prepare
statements are executed.

please read my comments in code:

if( db->lookaside.bEnabled ){
       if( n>db->lookaside.sz ){
         db->lookaside.anStat[1]++;
       }
*      //pBuf assigned with list of available buffers *
*     else if( (pBuf = db->lookaside.pFree)==0 ){*
         db->lookaside.anStat[2]++;
       }else{
*       //it will crash here and there is no check for NULL here*
*        db->lookaside.pFree = pBuf->pNext;*
         db->lookaside.nOut++;
         db->lookaside.anStat[0]++;
         if( db->lookaside.nOut>db->lookaside.mxOut ){
           db->lookaside.mxOut = db->lookaside.nOut;
         }
         return (void*)pBuf;

You're misreading the "else if" condition. If pBuf is set to NULL,
the condition will be true and the "db->lookaside.anStat[2]++;"
line executed. Not the block below it.

_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to