diff options
author | drh <drh@noemail.net> | 2011-06-13 12:19:21 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2011-06-13 12:19:21 +0000 |
commit | 0a32fa6d8150d8b5399a87d6c3ee7a679ee241a6 (patch) | |
tree | 45e2bbab28b06472bfea16c6eac6426a8d8c49b7 /src | |
parent | 7006c18e0043a2787b763e7fa7f3a0df964fe5cf (diff) | |
download | sqlite-0a32fa6d8150d8b5399a87d6c3ee7a679ee241a6.tar.gz sqlite-0a32fa6d8150d8b5399a87d6c3ee7a679ee241a6.zip |
Use only unsigned values in the implementatin of LIKE and GLOB so that
values won't overflow to negative when dealing with malformed UTF8.
FossilOrigin-Name: 77f01578bb565d1bc884b374b68bae10ce34a084
Diffstat (limited to 'src')
-rw-r--r-- | src/func.c | 12 | ||||
-rw-r--r-- | src/sqliteInt.h | 2 | ||||
-rw-r--r-- | src/utf.c | 2 |
3 files changed, 8 insertions, 8 deletions
diff --git a/src/func.c b/src/func.c index 0b9b600d7..407ea26aa 100644 --- a/src/func.c +++ b/src/func.c @@ -506,10 +506,10 @@ struct compareInfo { ** whereas only characters less than 0x80 do in ASCII. */ #if defined(SQLITE_EBCDIC) -# define sqlite3Utf8Read(A,C) (*(A++)) -# define GlogUpperToLower(A) A = sqlite3UpperToLower[A] +# define sqlite3Utf8Read(A,C) (*(A++)) +# define GlogUpperToLower(A) A = sqlite3UpperToLower[A] #else -# define GlogUpperToLower(A) if( A<0x80 ){ A = sqlite3UpperToLower[A]; } +# define GlogUpperToLower(A) if( !((A)&~0x7f) ){ A = sqlite3UpperToLower[A]; } #endif static const struct compareInfo globInfo = { '*', '?', '[', 0 }; @@ -552,9 +552,9 @@ static int patternCompare( const u8 *zPattern, /* The glob pattern */ const u8 *zString, /* The string to compare against the glob */ const struct compareInfo *pInfo, /* Information about how to do the compare */ - const int esc /* The escape character */ + u32 esc /* The escape character */ ){ - int c, c2; + u32 c, c2; int invert; int seen; u8 matchOne = pInfo->matchOne; @@ -684,7 +684,7 @@ static void likeFunc( sqlite3_value **argv ){ const unsigned char *zA, *zB; - int escape = 0; + u32 escape = 0; int nPat; sqlite3 *db = sqlite3_context_db_handle(context); diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 8cf8966fe..83ddb2d5a 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -2879,7 +2879,7 @@ int sqlite3GetInt32(const char *, int*); int sqlite3Atoi(const char*); int sqlite3Utf16ByteLen(const void *pData, int nChar); int sqlite3Utf8CharLen(const char *pData, int nByte); -int sqlite3Utf8Read(const u8*, const u8**); +u32 sqlite3Utf8Read(const u8*, const u8**); /* ** Routines to read and write variable-length integers. These used to @@ -163,7 +163,7 @@ static const unsigned char sqlite3Utf8Trans1[] = { || (c&0xFFFFF800)==0xD800 \ || (c&0xFFFFFFFE)==0xFFFE ){ c = 0xFFFD; } \ } -int sqlite3Utf8Read( +u32 sqlite3Utf8Read( const unsigned char *zIn, /* First byte of UTF-8 character */ const unsigned char **pzNext /* Write first byte past UTF-8 char here */ ){ |