diff options
author | Chip Salzenberg <chip@perl.com> | 1997-04-18 00:00:00 +0000 |
---|---|---|
committer | Chip Salzenberg <chip@atlantic.net> | 1997-04-18 00:00:00 +0000 |
commit | bbdab0432496b4b2fda64f190e98e90b407f7023 (patch) | |
tree | 1eb56be83494f95c616fe0b5544af426f50b5e6f | |
parent | debf9080d68fa692bfcb034241122c6cfa1b8d6e (diff) | |
download | perl-bbdab0432496b4b2fda64f190e98e90b407f7023.tar.gz |
Fix (and test) spaces in {,un}pack()
-rw-r--r-- | pp.c | 12 | ||||
-rwxr-xr-x | t/op/pack.t | 2 |
2 files changed, 9 insertions, 5 deletions
@@ -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"); |