@@ -107,11 +107,11 @@ while (i < _s->cStringLength) { const of_unichar_t *const *table; size_t tableSize; of_unichar_t c; - size_t cLen; + ssize_t cLen; if (isStart) { table = startTable; tableSize = middleTableSize; } else { @@ -120,11 +120,11 @@ } cLen = of_string_utf8_decode(_s->cString + i, _s->cStringLength - i, &c); - if (cLen == 0 || c > 0x10FFFF) { + if (cLen <= 0 || c > 0x10FFFF) { [self freeMemory: unicodeString]; @throw [OFInvalidEncodingException exception]; } switch (c) { @@ -202,11 +202,12 @@ - (void)setCharacter: (of_unichar_t)character atIndex: (size_t)index { char buffer[4]; of_unichar_t c; - size_t lenNew, lenOld; + size_t lenNew; + ssize_t lenOld; if (_s->isUTF8) index = of_string_utf8_get_position(_s->cString, index, _s->cStringLength); @@ -222,18 +223,18 @@ if ((lenNew = of_string_utf8_encode(character, buffer)) == 0) @throw [OFInvalidEncodingException exception]; if ((lenOld = of_string_utf8_decode(_s->cString + index, - _s->cStringLength - index, &c)) == 0) + _s->cStringLength - index, &c)) <= 0) @throw [OFInvalidEncodingException exception]; _s->hashed = false; - if (lenNew == lenOld) + if (lenNew == (size_t)lenOld) memcpy(_s->cString + index, buffer, lenNew); - else if (lenNew > lenOld) { + else if (lenNew > (size_t)lenOld) { _s->cString = [self resizeMemory: _s->cString size: _s->cStringLength - lenOld + lenNew + 1]; memmove(_s->cString + index + lenNew, @@ -245,11 +246,11 @@ _s->cStringLength += lenNew; _s->cString[_s->cStringLength] = '\0'; if (character & 0x80) _s->isUTF8 = true; - } else if (lenNew < lenOld) { + } else if (lenNew < (size_t)lenOld) { memmove(_s->cString + index + lenNew, _s->cString + index + lenOld, _s->cStringLength - index - lenOld); memcpy(_s->cString + index, buffer, lenNew);