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)
*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)
| ((s[1] & 0x3f) << 12)
| ((s[2] & 0x3f) << 6)
| (s[3] & 0x3f);
- s += 4;
+ s += 4; len -= 4;
}
else
{
*p++ = 0xfffd;
- s++;
+ s++; len--;
}
}