From d043bf537616da4bb5c403745093b0b88165efc9 Mon Sep 17 00:00:00 2001 From: wbq_sky Date: Fri, 3 Sep 2021 16:16:38 +0800 Subject: [PATCH] fix the infinite loop in the trim function while the pattern is well formed. Signed-off-by: wbq_sky (cherry picked from commit d81186e4277fe39540697e8db4e62eba5c7e88ff) --- 0003-infinite-loop-in-trim-function.patch | 88 +++++++++++++++++++++++ sqlite.spec | 7 +- 2 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 0003-infinite-loop-in-trim-function.patch diff --git a/0003-infinite-loop-in-trim-function.patch b/0003-infinite-loop-in-trim-function.patch new file mode 100644 index 0000000..1790e40 --- /dev/null +++ b/0003-infinite-loop-in-trim-function.patch @@ -0,0 +1,88 @@ +diff -ruN origin_src/src/func.c sqlite-src-3340000/src/func.c +--- origin_src/src/func.c 2021-09-03 10:46:50.253089516 +0800 ++++ sqlite-src-3340000/src/func.c 2021-09-03 10:59:23.151415929 +0800 +@@ -1315,10 +1315,10 @@ + ){ + const unsigned char *zIn; /* Input string */ + const unsigned char *zCharSet; /* Set of characters to trim */ +- int nIn; /* Number of bytes in input */ ++ unsigned int nIn; /* Number of bytes in input */ + int flags; /* 1: trimleft 2: trimright 3: trim */ + int i; /* Loop counter */ +- unsigned char *aLen = 0; /* Length of each character in zCharSet */ ++ unsigned int *aLen = 0; /* Length of each character in zCharSet */ + unsigned char **azChar = 0; /* Individual characters in zCharSet */ + int nChar; /* Number of characters in zCharSet */ + +@@ -1327,13 +1327,13 @@ + } + zIn = sqlite3_value_text(argv[0]); + if( zIn==0 ) return; +- nIn = sqlite3_value_bytes(argv[0]); ++ nIn = (unsigned)sqlite3_value_bytes(argv[0]); + assert( zIn==sqlite3_value_text(argv[0]) ); + if( argc==1 ){ +- static const unsigned char lenOne[] = { 1 }; ++ static const unsigned lenOne[] = { 1 }; + static unsigned char * const azOne[] = { (u8*)" " }; + nChar = 1; +- aLen = (u8*)lenOne; ++ aLen = (unsigned*)lenOne; + azChar = (unsigned char **)azOne; + zCharSet = 0; + }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){ +@@ -1344,15 +1344,16 @@ + SQLITE_SKIP_UTF8(z); + } + if( nChar>0 ){ +- azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1)); ++ azChar = contextMalloc(context, ++ ((i64)nChar)*(sizeof(char*)+sizeof(unsigned))); + if( azChar==0 ){ + return; + } +- aLen = (unsigned char*)&azChar[nChar]; ++ aLen = (unsigned*)&azChar[nChar]; + for(z=zCharSet, nChar=0; *z; nChar++){ + azChar[nChar] = (unsigned char *)z; + SQLITE_SKIP_UTF8(z); +- aLen[nChar] = (u8)(z - azChar[nChar]); ++ aLen[nChar] = (unsigned)(z - azChar[nChar]); + } + } + } +@@ -1360,7 +1361,7 @@ + flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context)); + if( flags & 1 ){ + while( nIn>0 ){ +- int len = 0; ++ unsigned int len = 0; + for(i=0; i0 ){ +- int len = 0; ++ unsigned int len = 0; + for(i=0; i - 3.34.0-2 +- fix the infinite loop problem in the trim function while the pattern is well formed. + * Thu Jan 14 2021 yanglongkang - 3.34.0-1 - update package to 3.34.0 -- Gitee