1 http://crbug.com/178677 refers to potential buffer overruns in ASAN 2 due to memcmp() being used instead of strcmp() in SQLite. Reported to 3 SQLite team, resulting in http://www.sqlite.org/src/info/d73435587b . 4 This was backported into Chromium's version of SQLite, then this file 5 was generated using: 6 git diff --relative=third_party/sqlite/src --src-prefix='' --dst-prefix='' > third_party/sqlite/memcmp.patch 7 8 9 diff --git src/analyze.c src/analyze.c 10 index 17c1de8..2444e74 100644 11 --- src/analyze.c 12 +++ src/analyze.c 13 @@ -142,7 +142,7 @@ static void analyzeOneTable( 14 /* Do not gather statistics on views or virtual tables */ 15 return; 16 } 17 - if( memcmp(pTab->zName, "sqlite_", 7)==0 ){ 18 + if( sqlite3_strnicmp(pTab->zName, "sqlite_", 7)==0 ){ 19 /* Do not gather statistics on system tables */ 20 return; 21 } 22 @@ -548,7 +548,7 @@ static int analysisLoader(void *pData, int argc, char **argv, char **NotUsed){ 23 if( pIndex==0 ) break; 24 pIndex->aiRowEst[i] = v; 25 if( *z==' ' ) z++; 26 - if( memcmp(z, "unordered", 10)==0 ){ 27 + if( strcmp(z, "unordered")==0 ){ 28 pIndex->bUnordered = 1; 29 break; 30 } 31 diff --git src/build.c src/build.c 32 index 323a616..4f4f8ed 100644 33 --- src/build.c 34 +++ src/build.c 35 @@ -2480,7 +2480,7 @@ Index *sqlite3CreateIndex( 36 assert( pTab!=0 ); 37 assert( pParse->nErr==0 ); 38 if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 39 - && memcmp(&pTab->zName[7],"altertab_",9)!=0 ){ 40 + && sqlite3StrNICmp(&pTab->zName[7],"altertab_",9)!=0 ){ 41 sqlite3ErrorMsg(pParse, "table %s may not be indexed", pTab->zName); 42 goto exit_create_index; 43 } 44 diff --git src/expr.c src/expr.c 45 index 2699ae1..9d1193b 100644 46 --- src/expr.c 47 +++ src/expr.c 48 @@ -578,12 +578,10 @@ void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr){ 49 ** has never appeared before, reuse the same variable number 50 */ 51 int i; 52 - u32 n; 53 - n = sqlite3Strlen30(z); 54 for(i=0; i<pParse->nVarExpr; i++){ 55 Expr *pE = pParse->apVarExpr[i]; 56 assert( pE!=0 ); 57 - if( memcmp(pE->u.zToken, z, n)==0 && pE->u.zToken[n]==0 ){ 58 + if( strcmp(pE->u.zToken, z)==0 ){ 59 pExpr->iColumn = pE->iColumn; 60 break; 61 } 62 diff --git src/os_unix.c src/os_unix.c 63 index 804c588..77ffd8a 100644 64 --- src/os_unix.c 65 +++ src/os_unix.c 66 @@ -4506,7 +4506,7 @@ int fillInUnixFile( 67 OSTRACE(("OPEN %-3d %s\n", h, zFilename)); 68 pNew->h = h; 69 pNew->zPath = zFilename; 70 - if( memcmp(pVfs->zName,"unix-excl",10)==0 ){ 71 + if( strcmp(pVfs->zName,"unix-excl")==0 ){ 72 pNew->ctrlFlags = UNIXFILE_EXCL; 73 }else{ 74 pNew->ctrlFlags = 0; 75 diff --git src/vdbeapi.c src/vdbeapi.c 76 index 90baacc..80ceb9f 100644 77 --- src/vdbeapi.c 78 +++ src/vdbeapi.c 79 @@ -1222,7 +1222,7 @@ int sqlite3VdbeParameterIndex(Vdbe *p, const char *zName, int nName){ 80 if( zName ){ 81 for(i=0; i<p->nVar; i++){ 82 const char *z = p->azVar[i]; 83 - if( z && memcmp(z,zName,nName)==0 && z[nName]==0 ){ 84 + if( z && strncmp(z,zName,nName)==0 && z[nName]==0 ){ 85 return i+1; 86 } 87 } 88