summaryrefslogtreecommitdiff
path: root/sv.c
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2001-01-05 00:47:23 +0000
committerJarkko Hietaniemi <jhi@iki.fi>2001-01-05 00:47:23 +0000
commita0dbb04553005cdbafdeb7435a79ae500b5aa8ff (patch)
treec3c2af7757f55ba66089c19094e138ecb04cb469 /sv.c
parent7a800fca3140c85b8a41515633e9bb98c38e5603 (diff)
downloadperl-a0dbb04553005cdbafdeb7435a79ae500b5aa8ff.tar.gz
Unify UTF-8 malformedness handling.
p4raw-id: //depot/perl@8323
Diffstat (limited to 'sv.c')
-rw-r--r--sv.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/sv.c b/sv.c
index b999e6c322..139d98acca 100644
--- a/sv.c
+++ b/sv.c
@@ -4606,17 +4606,18 @@ Perl_sv_pos_b2u(pTHX_ register SV *sv, I32* offsetp)
s = (U8*)SvPV(sv, len);
if (len < *offsetp)
- Perl_croak(aTHX_ "panic: bad byte offset");
+ Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
send = s + *offsetp;
len = 0;
while (s < send) {
- s += UTF8SKIP(s);
- ++len;
- }
- if (s != send) {
- if (ckWARN_d(WARN_UTF8))
- Perl_warner(aTHX_ WARN_UTF8, "Malformed UTF-8 character");
- --len;
+ STRLEN n;
+
+ if (utf8_to_uv(s, UTF8SKIP(s), &n, 0)) {
+ s += n;
+ len++;
+ }
+ else
+ break;
}
*offsetp = len;
return;