| Index: third_party/sqlite/src/src/mem5.c | 
| diff --git a/third_party/sqlite/src/src/mem5.c b/third_party/sqlite/src/src/mem5.c | 
| index 783cef6176c59cbf30914631095a1a54f4e42e08..1479ddd0d09d69dad6780d40abeebb22bcfa0f67 100644 | 
| --- a/third_party/sqlite/src/src/mem5.c | 
| +++ b/third_party/sqlite/src/src/mem5.c | 
| @@ -28,7 +28,7 @@ | 
| **   1.  All memory allocations sizes are rounded up to a power of 2. | 
| ** | 
| **   2.  If two adjacent free blocks are the halves of a larger block, | 
| -**       then the two blocks are coalesed into the single larger block. | 
| +**       then the two blocks are coalesced into the single larger block. | 
| ** | 
| **   3.  New memory is allocated from the first available free block. | 
| ** | 
| @@ -130,13 +130,13 @@ static SQLITE_WSD struct Mem5Global { | 
| } mem5; | 
|  | 
| /* | 
| -** Access the static variable through a macro for SQLITE_OMIT_WSD | 
| +** Access the static variable through a macro for SQLITE_OMIT_WSD. | 
| */ | 
| #define mem5 GLOBAL(struct Mem5Global, mem5) | 
|  | 
| /* | 
| ** Assuming mem5.zPool is divided up into an array of Mem5Link | 
| -** structures, return a pointer to the idx-th such lik. | 
| +** structures, return a pointer to the idx-th such link. | 
| */ | 
| #define MEM5LINK(idx) ((Mem5Link *)(&mem5.zPool[(idx)*mem5.szAtom])) | 
|  | 
| @@ -202,7 +202,7 @@ static void memsys5Leave(void){ | 
| static int memsys5Size(void *p){ | 
| int iSize = 0; | 
| if( p ){ | 
| -    int i = ((u8 *)p-mem5.zPool)/mem5.szAtom; | 
| +    int i = (int)(((u8 *)p-mem5.zPool)/mem5.szAtom); | 
| assert( i>=0 && i<mem5.nBlock ); | 
| iSize = mem5.szAtom * (1 << (mem5.aCtrl[i]&CTRL_LOGSIZE)); | 
| } | 
| @@ -210,29 +210,10 @@ static int memsys5Size(void *p){ | 
| } | 
|  | 
| /* | 
| -** Find the first entry on the freelist iLogsize.  Unlink that | 
| -** entry and return its index. | 
| -*/ | 
| -static int memsys5UnlinkFirst(int iLogsize){ | 
| -  int i; | 
| -  int iFirst; | 
| - | 
| -  assert( iLogsize>=0 && iLogsize<=LOGMAX ); | 
| -  i = iFirst = mem5.aiFreelist[iLogsize]; | 
| -  assert( iFirst>=0 ); | 
| -  while( i>0 ){ | 
| -    if( i<iFirst ) iFirst = i; | 
| -    i = MEM5LINK(i)->next; | 
| -  } | 
| -  memsys5Unlink(iFirst, iLogsize); | 
| -  return iFirst; | 
| -} | 
| - | 
| -/* | 
| ** Return a block of memory of at least nBytes in size. | 
| ** Return NULL if unable.  Return NULL if nBytes==0. | 
| ** | 
| -** The caller guarantees that nByte positive. | 
| +** The caller guarantees that nByte is positive. | 
| ** | 
| ** The caller has obtained a mutex prior to invoking this | 
| ** routine so there is never any chance that two or more | 
| @@ -267,13 +248,14 @@ static void *memsys5MallocUnsafe(int nByte){ | 
| ** block.  If not, then split a block of the next larger power of | 
| ** two in order to create a new free block of size iLogsize. | 
| */ | 
| -  for(iBin=iLogsize; mem5.aiFreelist[iBin]<0 && iBin<=LOGMAX; iBin++){} | 
| +  for(iBin=iLogsize; iBin<=LOGMAX && mem5.aiFreelist[iBin]<0; iBin++){} | 
| if( iBin>LOGMAX ){ | 
| testcase( sqlite3GlobalConfig.xLog!=0 ); | 
| sqlite3_log(SQLITE_NOMEM, "failed to allocate %u bytes", nByte); | 
| return 0; | 
| } | 
| -  i = memsys5UnlinkFirst(iBin); | 
| +  i = mem5.aiFreelist[iBin]; | 
| +  memsys5Unlink(i, iBin); | 
| while( iBin>iLogsize ){ | 
| int newSize; | 
|  | 
| @@ -293,6 +275,12 @@ static void *memsys5MallocUnsafe(int nByte){ | 
| if( mem5.maxCount<mem5.currentCount ) mem5.maxCount = mem5.currentCount; | 
| if( mem5.maxOut<mem5.currentOut ) mem5.maxOut = mem5.currentOut; | 
|  | 
| +#ifdef SQLITE_DEBUG | 
| +  /* Make sure the allocated memory does not assume that it is set to zero | 
| +  ** or retains a value from a previous allocation */ | 
| +  memset(&mem5.zPool[i*mem5.szAtom], 0xAA, iFullSz); | 
| +#endif | 
| + | 
| /* Return a pointer to the allocated memory. */ | 
| return (void*)&mem5.zPool[i*mem5.szAtom]; | 
| } | 
| @@ -307,7 +295,7 @@ static void memsys5FreeUnsafe(void *pOld){ | 
| /* Set iBlock to the index of the block pointed to by pOld in | 
| ** the array of mem5.szAtom byte blocks pointed to by mem5.zPool. | 
| */ | 
| -  iBlock = ((u8 *)pOld-mem5.zPool)/mem5.szAtom; | 
| +  iBlock = (int)(((u8 *)pOld-mem5.zPool)/mem5.szAtom); | 
|  | 
| /* Check that the pointer pOld points to a valid, non-free block. */ | 
| assert( iBlock>=0 && iBlock<mem5.nBlock ); | 
| @@ -350,11 +338,18 @@ static void memsys5FreeUnsafe(void *pOld){ | 
| } | 
| size *= 2; | 
| } | 
| + | 
| +#ifdef SQLITE_DEBUG | 
| +  /* Overwrite freed memory with the 0x55 bit pattern to verify that it is | 
| +  ** not used after being freed */ | 
| +  memset(&mem5.zPool[iBlock*mem5.szAtom], 0x55, size); | 
| +#endif | 
| + | 
| memsys5Link(iBlock, iLogsize); | 
| } | 
|  | 
| /* | 
| -** Allocate nBytes of memory | 
| +** Allocate nBytes of memory. | 
| */ | 
| static void *memsys5Malloc(int nBytes){ | 
| sqlite3_int64 *p = 0; | 
|  |