summaryrefslogtreecommitdiff
path: root/pp_pack.c
diff options
context:
space:
mode:
authorTon Hospel <perl5-porters@ton.iguana.be>2005-03-21 21:31:37 +0000
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2005-03-21 21:44:37 +0000
commit18bdf90ade8cd9b8918f6edac90115b5fbbe6fd3 (patch)
treedfff75a055c095ef8e751e39552786d910320a1e /pp_pack.c
parentcc601c3163078dbee18369839db37a81c9f1d02a (diff)
downloadperl-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.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/pp_pack.c b/pp_pack.c
index 1b56392239..45eabb28b2 100644
--- a/pp_pack.c
+++ b/pp_pack.c
@@ -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);