|
@@ -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){
|