diff options
author | Ton Hospel <perl5-porters@ton.iguana.be> | 2005-03-21 21:31:37 +0000 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2005-03-21 21:44:37 +0000 |
commit | 18bdf90ade8cd9b8918f6edac90115b5fbbe6fd3 (patch) | |
tree | dfff75a055c095ef8e751e39552786d910320a1e /pp_pack.c | |
parent | cc601c3163078dbee18369839db37a81c9f1d02a (diff) | |
download | perl-18bdf90ade8cd9b8918f6edac90115b5fbbe6fd3.tar.gz |
Re: unpack A strip patch
Message-Id: <d1nefp$lpe$1@post.home.lunix>
p4raw-id: //depot/perl@24060
Diffstat (limited to 'pp_pack.c')
-rw-r--r-- | pp_pack.c | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -1373,9 +1373,19 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, char *s, char *strbeg, char *strend, char } else if (datumtype == 'A') { /* 'A' strips both nulls and spaces */ char *ptr; - for (ptr = s+len-1; ptr >= s; ptr--) - if (*ptr != 0 && !isSPACE(*ptr)) break; - ptr++; + if (utf8 && (symptr->flags & FLAG_WAS_UTF8)) { + for (ptr = s+len-1; ptr >= s; ptr--) + if (*ptr != 0 && !UTF8_IS_CONTINUATION(*ptr) && + !is_utf8_space(ptr)) break; + if (ptr >= s) ptr += UTF8SKIP(ptr); + else ptr++; + if (ptr > s+len) + Perl_croak(aTHX_ "Malformed UTF-8 string in unpack"); + } else { + for (ptr = s+len-1; ptr >= s; ptr--) + if (*ptr != 0 && !isSPACE(*ptr)) break; + ptr++; + } sv = newSVpvn(s, ptr-s); } else sv = newSVpvn(s, len); |