Selaa lähdekoodia

Update sqlite3

mingodad 9 vuotta sitten
vanhempi
sitoutus
590ee4c685
2 muutettua tiedostoa jossa 23 lisäystä ja 8 poistoa
  1. 22 7
      SquiLu-ext/sqlite3.c
  2. 1 1
      SquiLu-ext/sqlite3.h

+ 22 - 7
SquiLu-ext/sqlite3.c

@@ -382,7 +382,7 @@ extern "C" {
 */
 */
 #define SQLITE_VERSION        "3.15.0"
 #define SQLITE_VERSION        "3.15.0"
 #define SQLITE_VERSION_NUMBER 3015000
 #define SQLITE_VERSION_NUMBER 3015000
-#define SQLITE_SOURCE_ID      "2016-08-11 18:05:47 ed406d31ff54ee3de8db91690a966e5c561f8f94"
+#define SQLITE_SOURCE_ID      "2016-08-13 10:34:12 e22252e1da4cd9e41b970970a1c4f466aa6cc133"
 
 
 /*
 /*
 ** CAPI3REF: Run-Time Library Version Numbers
 ** CAPI3REF: Run-Time Library Version Numbers
@@ -186383,7 +186383,7 @@ static int sqlite3Fts5ExprClonePhrase(
   if( rc==SQLITE_OK ){
   if( rc==SQLITE_OK ){
     Fts5Colset *pColsetOrig = pOrig->pNode->pNear->pColset;
     Fts5Colset *pColsetOrig = pOrig->pNode->pNear->pColset;
     if( pColsetOrig ){
     if( pColsetOrig ){
-      int nByte = sizeof(Fts5Colset) + pColsetOrig->nCol * sizeof(int);
+      int nByte = sizeof(Fts5Colset) + (pColsetOrig->nCol-1) * sizeof(int);
       Fts5Colset *pColset = (Fts5Colset*)sqlite3Fts5MallocZero(&rc, nByte);
       Fts5Colset *pColset = (Fts5Colset*)sqlite3Fts5MallocZero(&rc, nByte);
       if( pColset ){ 
       if( pColset ){ 
         memcpy(pColset, pColsetOrig, nByte);
         memcpy(pColset, pColsetOrig, nByte);
@@ -188641,7 +188641,6 @@ static Fts5Data *fts5DataRead(Fts5Index *p, i64 iRowid){
   return pRet;
   return pRet;
 }
 }
 
 
-
 /*
 /*
 ** Release a reference to data record returned by an earlier call to
 ** Release a reference to data record returned by an earlier call to
 ** fts5DataRead().
 ** fts5DataRead().
@@ -188650,6 +188649,18 @@ static void fts5DataRelease(Fts5Data *pData){
   sqlite3_free(pData);
   sqlite3_free(pData);
 }
 }
 
 
+static Fts5Data *fts5LeafRead(Fts5Index *p, i64 iRowid){
+  Fts5Data *pRet = fts5DataRead(p, iRowid);
+  if( pRet ){
+    if( pRet->szLeaf>pRet->nn ){
+      p->rc = FTS5_CORRUPT;
+      fts5DataRelease(pRet);
+      pRet = 0;
+    }
+  }
+  return pRet;
+}
+
 static int fts5IndexPrepareStmt(
 static int fts5IndexPrepareStmt(
   Fts5Index *p,
   Fts5Index *p,
   sqlite3_stmt **ppStmt,
   sqlite3_stmt **ppStmt,
@@ -189458,7 +189469,7 @@ static void fts5SegIterNextPage(
     pIter->pLeaf = pIter->pNextLeaf;
     pIter->pLeaf = pIter->pNextLeaf;
     pIter->pNextLeaf = 0;
     pIter->pNextLeaf = 0;
   }else if( pIter->iLeafPgno<=pSeg->pgnoLast ){
   }else if( pIter->iLeafPgno<=pSeg->pgnoLast ){
-    pIter->pLeaf = fts5DataRead(p, 
+    pIter->pLeaf = fts5LeafRead(p, 
         FTS5_SEGMENT_ROWID(pSeg->iSegid, pIter->iLeafPgno)
         FTS5_SEGMENT_ROWID(pSeg->iSegid, pIter->iLeafPgno)
     );
     );
   }else{
   }else{
@@ -189961,9 +189972,8 @@ static void fts5SegIterNext(
         if( pLeaf->nn>pLeaf->szLeaf ){
         if( pLeaf->nn>pLeaf->szLeaf ){
           pIter->iPgidxOff = pLeaf->szLeaf + fts5GetVarint32(
           pIter->iPgidxOff = pLeaf->szLeaf + fts5GetVarint32(
               &pLeaf->p[pLeaf->szLeaf], pIter->iEndofDoclist
               &pLeaf->p[pLeaf->szLeaf], pIter->iEndofDoclist
-              );
+          );
         }
         }
-
       }
       }
       else if( pLeaf->nn>pLeaf->szLeaf ){
       else if( pLeaf->nn>pLeaf->szLeaf ){
         pIter->iPgidxOff = pLeaf->szLeaf + fts5GetVarint32(
         pIter->iPgidxOff = pLeaf->szLeaf + fts5GetVarint32(
@@ -190208,6 +190218,11 @@ static void fts5LeafSeek(
     iTermOff += nKeep;
     iTermOff += nKeep;
     iOff = iTermOff;
     iOff = iTermOff;
 
 
+    if( iOff>=n ){
+      p->rc = FTS5_CORRUPT;
+      return;
+    }
+
     /* Read the nKeep field of the next term. */
     /* Read the nKeep field of the next term. */
     fts5FastGetVarint32(a, iOff, nKeep);
     fts5FastGetVarint32(a, iOff, nKeep);
   }
   }
@@ -197028,7 +197043,7 @@ static void fts5SourceIdFunc(
 ){
 ){
   assert( nArg==0 );
   assert( nArg==0 );
   UNUSED_PARAM2(nArg, apUnused);
   UNUSED_PARAM2(nArg, apUnused);
-  sqlite3_result_text(pCtx, "fts5: 2016-08-11 09:55:55 ab83d7077da80ddbcf399d0797d79e964dc64f0e", -1, SQLITE_TRANSIENT);
+  sqlite3_result_text(pCtx, "fts5: 2016-08-13 10:34:12 e22252e1da4cd9e41b970970a1c4f466aa6cc133", -1, SQLITE_TRANSIENT);
 }
 }
 
 
 static int fts5Init(sqlite3 *db){
 static int fts5Init(sqlite3 *db){

+ 1 - 1
SquiLu-ext/sqlite3.h

@@ -122,7 +122,7 @@ extern "C" {
 */
 */
 #define SQLITE_VERSION        "3.15.0"
 #define SQLITE_VERSION        "3.15.0"
 #define SQLITE_VERSION_NUMBER 3015000
 #define SQLITE_VERSION_NUMBER 3015000
-#define SQLITE_SOURCE_ID      "2016-08-11 18:05:47 ed406d31ff54ee3de8db91690a966e5c561f8f94"
+#define SQLITE_SOURCE_ID      "2016-08-13 10:34:12 e22252e1da4cd9e41b970970a1c4f466aa6cc133"
 
 
 /*
 /*
 ** CAPI3REF: Run-Time Library Version Numbers
 ** CAPI3REF: Run-Time Library Version Numbers