From: Wilfried Goesgens Date: Fri, 19 Aug 2011 16:43:30 +0000 (+0000) Subject: fix counting of UTF8-charwidth X-Git-Tag: v8.01~72 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=d6a268eae59b4355daf9e5b32d097530e24566e7 fix counting of UTF8-charwidth - Ctdl_GetUtf8SequenceLength(): testbyte needs to be unsigned char, else >> will shift us new bits in from the left - we need to shift 'test' to the right - start counting at 0 --- diff --git a/libcitadel/lib/stringbuf.c b/libcitadel/lib/stringbuf.c index f3cd8c543..aadd92d19 100644 --- a/libcitadel/lib/stringbuf.c +++ b/libcitadel/lib/stringbuf.c @@ -3328,14 +3328,16 @@ void StrBuf_RFC822_2_Utf8(StrBuf *Target, */ static inline int Ctdl_GetUtf8SequenceLength(const char *CharS, const char *CharE) { - int n = 1; - char test = (1<<7); + int n = 0; + unsigned char test = (1<<7); if ((*CharS & 0xC0) == 0) return 1; - while ((n < 8) && ((test & *CharS) != 0)) { - test = test << 1; + while ((n < 8) && + ((test & ((unsigned char)*CharS)) != 0)) + { + test = test >> 1; n ++; } if ((n > 6) || ((CharE - CharS) < n))