|  | http://crbug.com/178677 refers to potential buffer overruns in ASAN | 
|  | due to memcmp() being used instead of strcmp() in SQLite.  Reported to | 
|  | SQLite team, resulting in http://www.sqlite.org/src/info/d73435587b . | 
|  | This was backported into Chromium's version of SQLite, then this file | 
|  | was generated using: | 
|  | git diff --relative=third_party/sqlite/src --src-prefix='' --dst-prefix='' > third_party/sqlite/memcmp.patch | 
|  |  | 
|  |  | 
|  | diff --git src/analyze.c src/analyze.c | 
|  | index 17c1de8..2444e74 100644 | 
|  | --- src/analyze.c | 
|  | +++ src/analyze.c | 
|  | @@ -142,7 +142,7 @@ static void analyzeOneTable( | 
|  | /* Do not gather statistics on views or virtual tables */ | 
|  | return; | 
|  | } | 
|  | -  if( memcmp(pTab->zName, "sqlite_", 7)==0 ){ | 
|  | +  if( sqlite3_strnicmp(pTab->zName, "sqlite_", 7)==0 ){ | 
|  | /* Do not gather statistics on system tables */ | 
|  | return; | 
|  | } | 
|  | @@ -548,7 +548,7 @@ static int analysisLoader(void *pData, int argc, char **argv, char **NotUsed){ | 
|  | if( pIndex==0 ) break; | 
|  | pIndex->aiRowEst[i] = v; | 
|  | if( *z==' ' ) z++; | 
|  | -    if( memcmp(z, "unordered", 10)==0 ){ | 
|  | +    if( strcmp(z, "unordered")==0 ){ | 
|  | pIndex->bUnordered = 1; | 
|  | break; | 
|  | } | 
|  | diff --git src/build.c src/build.c | 
|  | index 323a616..4f4f8ed 100644 | 
|  | --- src/build.c | 
|  | +++ src/build.c | 
|  | @@ -2480,7 +2480,7 @@ Index *sqlite3CreateIndex( | 
|  | assert( pTab!=0 ); | 
|  | assert( pParse->nErr==0 ); | 
|  | if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 | 
|  | -       && memcmp(&pTab->zName[7],"altertab_",9)!=0 ){ | 
|  | +       && sqlite3StrNICmp(&pTab->zName[7],"altertab_",9)!=0 ){ | 
|  | sqlite3ErrorMsg(pParse, "table %s may not be indexed", pTab->zName); | 
|  | goto exit_create_index; | 
|  | } | 
|  | diff --git src/expr.c src/expr.c | 
|  | index 2699ae1..9d1193b 100644 | 
|  | --- src/expr.c | 
|  | +++ src/expr.c | 
|  | @@ -578,12 +578,10 @@ void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr){ | 
|  | ** has never appeared before, reuse the same variable number | 
|  | */ | 
|  | int i; | 
|  | -    u32 n; | 
|  | -    n = sqlite3Strlen30(z); | 
|  | for(i=0; i<pParse->nVarExpr; i++){ | 
|  | Expr *pE = pParse->apVarExpr[i]; | 
|  | assert( pE!=0 ); | 
|  | -      if( memcmp(pE->u.zToken, z, n)==0 && pE->u.zToken[n]==0 ){ | 
|  | +      if( strcmp(pE->u.zToken, z)==0 ){ | 
|  | pExpr->iColumn = pE->iColumn; | 
|  | break; | 
|  | } | 
|  | diff --git src/os_unix.c src/os_unix.c | 
|  | index 804c588..77ffd8a 100644 | 
|  | --- src/os_unix.c | 
|  | +++ src/os_unix.c | 
|  | @@ -4506,7 +4506,7 @@ int fillInUnixFile( | 
|  | OSTRACE(("OPEN    %-3d %s\n", h, zFilename)); | 
|  | pNew->h = h; | 
|  | pNew->zPath = zFilename; | 
|  | -  if( memcmp(pVfs->zName,"unix-excl",10)==0 ){ | 
|  | +  if( strcmp(pVfs->zName,"unix-excl")==0 ){ | 
|  | pNew->ctrlFlags = UNIXFILE_EXCL; | 
|  | }else{ | 
|  | pNew->ctrlFlags = 0; | 
|  | diff --git src/vdbeapi.c src/vdbeapi.c | 
|  | index 90baacc..80ceb9f 100644 | 
|  | --- src/vdbeapi.c | 
|  | +++ src/vdbeapi.c | 
|  | @@ -1222,7 +1222,7 @@ int sqlite3VdbeParameterIndex(Vdbe *p, const char *zName, int nName){ | 
|  | if( zName ){ | 
|  | for(i=0; i<p->nVar; i++){ | 
|  | const char *z = p->azVar[i]; | 
|  | -      if( z && memcmp(z,zName,nName)==0 && z[nName]==0 ){ | 
|  | +      if( z && strncmp(z,zName,nName)==0 && z[nName]==0 ){ | 
|  | return i+1; | 
|  | } | 
|  | } |