Index: third_party/sqlite/src/ext/fts3/fts3_icu.c |
diff --git a/third_party/sqlite/src/ext/fts3/fts3_icu.c b/third_party/sqlite/src/ext/fts3/fts3_icu.c |
index e406168d4f39d48cc163f0b5f6353cfe0051435e..52df8c7d8128e3f6e71bc0571653232eac06a9a5 100644 |
--- a/third_party/sqlite/src/ext/fts3/fts3_icu.c |
+++ b/third_party/sqlite/src/ext/fts3/fts3_icu.c |
@@ -10,10 +10,8 @@ |
** |
************************************************************************* |
** This file implements a tokenizer for fts3 based on the ICU library. |
-** |
-** $Id: fts3_icu.c,v 1.3 2008/09/01 18:34:20 danielk1977 Exp $ |
*/ |
- |
+#include "fts3Int.h" |
#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) |
#ifdef SQLITE_ENABLE_ICU |
@@ -112,21 +110,24 @@ static int icuOpen( |
*ppCursor = 0; |
- if( nInput<0 ){ |
+ if( zInput==0 ){ |
+ nInput = 0; |
+ zInput = ""; |
+ }else if( nInput<0 ){ |
nInput = strlen(zInput); |
} |
nChar = nInput+1; |
pCsr = (IcuCursor *)sqlite3_malloc( |
sizeof(IcuCursor) + /* IcuCursor */ |
- (nChar+1) * sizeof(int) + /* IcuCursor.aOffset[] */ |
- nChar * sizeof(UChar) /* IcuCursor.aChar[] */ |
+ ((nChar+3)&~3) * sizeof(UChar) + /* IcuCursor.aChar[] */ |
+ (nChar+1) * sizeof(int) /* IcuCursor.aOffset[] */ |
); |
if( !pCsr ){ |
return SQLITE_NOMEM; |
} |
memset(pCsr, 0, sizeof(IcuCursor)); |
- pCsr->aOffset = (int *)&pCsr[1]; |
- pCsr->aChar = (UChar *)&pCsr->aOffset[nChar+1]; |
+ pCsr->aChar = (UChar *)&pCsr[1]; |
+ pCsr->aOffset = (int *)&pCsr->aChar[(nChar+3)&~3]; |
pCsr->aOffset[iOut] = iInput; |
U8_NEXT(zInput, iInput, nInput, c); |