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; inVarExpr; 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; inVar; 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; } }