int natint; /* native integer */
int unatint; /* unsigned native integer */
#endif
+ bool do_utf8 = DO_UTF8(right);
if (gimme != G_ARRAY) { /* arrange to do first one only */
/*SUPPRESS 530*/
DIE(aTHX_ "'!' allowed only after types %s", natstr);
}
star = 0;
- if (pat >= patend)
+ if (pat > patend)
len = 1;
else if (*pat == '*') {
len = strend - strbeg; /* long enough */
}
break;
case 'C':
+ unpack_C: /* unpack U will jump here if not UTF-8 */
+ if (len == 0) {
+ do_utf8 = FALSE;
+ break;
+ }
if (len > strend - s)
len = strend - s;
if (checksum) {
}
break;
case 'U':
+ if (len == 0) {
+ do_utf8 = TRUE;
+ break;
+ }
+ if (!do_utf8)
+ goto unpack_C;
if (len > strend - s)
len = strend - s;
if (checksum) {