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