return d;
}
#ifdef HAS_QUAD
- if (uv < 0x1000000000LL)
+ if (uv < UTF8_QUAD_MAX)
#endif
{
*d++ = 0xfe; /* Can't match U+FEFF! */
dTHR;
UV uv = *s, ouv;
STRLEN len = 1;
+#ifdef EBCDIC
+ bool dowarn = 0;
+#else
bool dowarn = ckWARN_d(WARN_UTF8);
+#endif
STRLEN expectlen = 0;
+ if (curlen == 0) {
+ if (dowarn)
+ Perl_warner(aTHX_ WARN_UTF8,
+ "Malformed UTF-8 character (an empty string)");
+ goto malformed;
+ }
+
if (uv <= 0x7f) { /* Pure ASCII. */
if (retlen)
*retlen = 1;
goto malformed;
}
- if ((uv >= 0xc0 && uv <= 0xfd && curlen >1 && s[1] < 0x80) &&
+ if ((uv >= 0xc0 && uv <= 0xfd && curlen > 1 && s[1] < 0x80) &&
!(flags & UTF8_ALLOW_NON_CONTINUATION)) {
if (dowarn)
Perl_warner(aTHX_ WARN_UTF8,
if (dowarn)
Perl_warner(aTHX_ WARN_UTF8,
"Malformed UTF-8 character (%d byte%s, need %d)",
- curlen, curlen > 1 ? "s" : "", expectlen);
+ curlen, curlen == 1 ? "" : "s", expectlen);
goto malformed;
}
if (dowarn)
Perl_warner(aTHX_ WARN_UTF8,
"Malformed UTF-8 character (%d byte%s, need %d)",
- expectlen, expectlen > 1 ? "s": "", UNISKIP(uv));
+ expectlen, expectlen == 1 ? "": "s", UNISKIP(uv));
goto malformed;
}
if (flags & UTF8_CHECK_ONLY) {
if (retlen)
- *retlen = len;
+ *retlen = -1;
return 0;
}
if (retlen)
- *retlen = -1;
+ *retlen = expectlen ? expectlen : len;
return UNICODE_REPLACEMENT_CHARACTER;
}
Copy(ptr, PL_last_swash_key, klen, U8);
}
- switch ((slen << 3) / needents) {
+ switch ((int)((slen << 3) / needents)) {
case 1:
bit = 1 << (off & 7);
off >>= 3;