fix unpack('u',...) problem with spaces in input
Gurusamy Sarathy [Sun, 2 Aug 1998 22:49:53 +0000 (22:49 +0000)]
p4raw-id: //depot/maint-5.005/perl@1715

pp.c
t/op/pack.t

diff --git a/pp.c b/pp.c
index 60cb417..9df4c97 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -2913,13 +2913,13 @@ static const char uuemap[] =
 static char uudmap[256];        /* Initialised on first use */
 #if 'I' == 73 && 'J' == 74
 /* On an ASCII/ISO kind of system */
-#define ISUUCHAR(ch)    ((ch) > ' ' && (ch) < 'a')
+#define ISUUCHAR(ch)    ((ch) >= ' ' && (ch) < 'a')
 #else
 /*
   Some other sort of character set - use memchr() so we don't match
   the null byte.
  */
-#define ISUUCHAR(ch)    (memchr(uuemap, (ch), sizeof(uuemap)-1))
+#define ISUUCHAR(ch)    (memchr(uuemap, (ch), sizeof(uuemap)-1) || (ch) == ' ')
 #endif
 
 PP(pp_unpack)
index 02efb66..c821ed6 100755 (executable)
@@ -161,16 +161,20 @@ foreach my $t (@templates) {
 # 57..58: uuencode/decode
 
 $in = join "", map { chr } 0..255;
+
+# just to be anal, we do some random tr/`/ /
 $uu = <<'EOUU';
-M``$"`P0%!@<("0H+#`T.#Q`1$A,4%187&!D:&QP='A\@(2(C)"4F)R@I*BLL
+M` $"`P0%!@<("0H+# T.#Q`1$A,4%187&!D:&QP='A\@(2(C)"4F)R@I*BLL
 M+2XO,#$R,S0U-C<X.3H[/#T^/T!!0D-$149'2$E*2TQ-3D]045)35%565UA9
 M6EM<75Y?8&%B8V1E9F=H:6IK;&UN;W!Q<G-T=79W>'EZ>WQ]?G^`@8*#A(6&
 MAXB)BHN,C8Z/D)&2DY25EI>8F9J;G)V>GZ"AHJ.DI::GJ*FJJZRMKJ^PL;*S
 MM+6VM[BYNKN\O;Z_P,'"P\3%QL?(R<K+S,W.S]#1TM/4U=;7V-G:V]S=WM_@
-?X>+CY.7FY^CIZNOL[>[O\/'R\_3U]O?X^?K[_/W^_P``
+?X>+CY.7FY^CIZNOL[>[O\/'R\_3U]O?X^?K[_/W^_P `
 EOUU
 
-print "not " unless pack('u', $in) eq $uu;
+$_ = $uu;
+tr/ /`/;
+print "not " unless pack('u', $in) eq $_;
 print "ok ", $test++, "\n";
 
 print "not " unless unpack('u', $uu) eq $in;