@@ -786,19 +786,20 @@ if ((character & 0xFC00) == 0xD800) { uint16_t nextCharacter; if (length <= i + 1) @throw [OFInvalidEncodingException - newWithClass: isa]; + newWithClass: isa]; nextCharacter = (swap ? of_bswap16(string[i + 1]) : string[i + 1]); character = (((character & 0x3FF) << 10) | (nextCharacter & 0x3FF)) + 0x10000; i++; + s->cStringLength--; } characterLen = of_string_unicode_to_utf8( character, buffer); @@ -1142,10 +1143,13 @@ - (BOOL)isEqual: (id)object { if (![object isKindOfClass: [OFString class]]) return NO; + + if ([object cStringLength] != s->cStringLength) + return NO; if (strcmp(s->cString, [object cString])) return NO; return YES;