summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChip Salzenberg <chip@perl.com>1997-04-18 00:00:00 +0000
committerChip Salzenberg <chip@atlantic.net>1997-04-18 00:00:00 +0000
commitbbdab0432496b4b2fda64f190e98e90b407f7023 (patch)
tree1eb56be83494f95c616fe0b5544af426f50b5e6f
parentdebf9080d68fa692bfcb034241122c6cfa1b8d6e (diff)
downloadperl-bbdab0432496b4b2fda64f190e98e90b407f7023.tar.gz
Fix (and test) spaces in {,un}pack()
-rw-r--r--pp.c12
-rwxr-xr-xt/op/pack.t2
2 files changed, 9 insertions, 5 deletions
diff --git a/pp.c b/pp.c
index 34c4ed3e1f..6423e277b3 100644
--- a/pp.c
+++ b/pp.c
@@ -2682,7 +2682,9 @@ PP(pp_unpack)
}
while (pat < patend) {
reparse:
- datumtype = *pat++;
+ datumtype = *pat++ & 0xFF;
+ if (isSPACE(datumtype))
+ continue;
if (pat >= patend)
len = 1;
else if (*pat == '*') {
@@ -2698,7 +2700,7 @@ PP(pp_unpack)
len = (datumtype != '@');
switch(datumtype) {
default:
- croak("Invalid type in unpack: '%c'", datumtype);
+ croak("Invalid type in unpack: '%c'", (int)datumtype);
case '%':
if (len == 1 && pat[-1] != '1')
len = 16;
@@ -3460,7 +3462,9 @@ PP(pp_pack)
sv_setpvn(cat, "", 0);
while (pat < patend) {
#define NEXTFROM (items-- > 0 ? *MARK++ : &sv_no)
- datumtype = *pat++;
+ datumtype = *pat++ & 0xFF;
+ if (isSPACE(datumtype))
+ continue;
if (*pat == '*') {
len = strchr("@Xxu", datumtype) ? 0 : items;
pat++;
@@ -3474,7 +3478,7 @@ PP(pp_pack)
len = 1;
switch(datumtype) {
default:
- croak("Invalid type in pack: '%c'", datumtype);
+ croak("Invalid type in pack: '%c'", (int)datumtype);
case '%':
DIE("%% may only be used in unpack");
case '@':
diff --git a/t/op/pack.t b/t/op/pack.t
index b11fe234e7..223b9d169b 100755
--- a/t/op/pack.t
+++ b/t/op/pack.t
@@ -4,7 +4,7 @@
print "1..25\n";
-$format = "c2x5CCxsdila6";
+$format = "c2 x5 C C x s d i l a6";
# Need the expression in here to force ary[5] to be numeric. This avoids
# test2 failing because ary2 goes str->numeric->str and ary doesn't.
@ary = (1,-100,127,128,32767,987.654321098 / 100.0,12345,123456,"abcdef");