--- rxvt-unicode/src/misc.C 2004/12/12 06:30:25 1.19 +++ rxvt-unicode/src/misc.C 2004/12/13 06:44:18 1.20 @@ -108,17 +108,19 @@ unsigned char *s = (unsigned char *)str; - while (len--) + while (len) { if (s[0] < 0x80) - *p++ = *s++; + { + *p++ = *s++; len--; + } else if (len > 0 && s[0] >= 0xc2 && s[0] <= 0xdf && (s[1] & 0xc0) == 0x80) { *p++ = ((s[0] & 0x1f) << 6) | (s[1] & 0x3f); - s += 2; + s += 2; len -= 2; } else if (len > 1 && ( (s[0] == 0xe0 && s[1] >= 0xa0 && s[1] <= 0xbf) @@ -131,7 +133,7 @@ *p++ = ((s[0] & 0x0f) << 12) | ((s[1] & 0x3f) << 6) | (s[2] & 0x3f); - s += 3; + s += 3; len -= 3; } else if (len > 2 && ( (s[0] == 0xf0 && s[1] >= 0x90 && s[1] <= 0xbf) @@ -145,12 +147,12 @@ | ((s[1] & 0x3f) << 12) | ((s[2] & 0x3f) << 6) | (s[3] & 0x3f); - s += 4; + s += 4; len -= 4; } else { *p++ = 0xfffd; - s++; + s++; len--; } }