ext/utf8/string_utf8.c in utf8-0.1.5 vs ext/utf8/string_utf8.c in utf8-0.1.6
- old
+ new
@@ -348,15 +348,16 @@
str = (unsigned char *)RSTRING_PTR(self);
len = RSTRING_LEN(self);
replace = REPLACEMENT_CHAR;
out = xmalloc(len);
- for(i=0; i<len; i++) {
+ for(i=0; i<len; i+=curCharLen) {
curCharLen = utf8CharLen(str+i, len);
if (curCharLen < 0) {
*(out+i) = replace;
+ curCharLen = 1;
} else {
- *(out+i) = *(str+i);
+ memcpy(out+i, str+i, curCharLen);
}
}
rb_out = rb_str_new((const char*)out, len);
AS_UTF8(rb_out);
\ No newline at end of file