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