my $no_signedness = $] > 5.009 ? '' :
"Signed/unsigned pack modifiers not available on this perl";
-plan tests => 14712;
+plan tests => 14713;
use strict;
use warnings qw(FATAL all);
my $IsTwosComplement = pack('i', -1) eq "\xFF" x $Config{intsize};
print "# \$IsTwosComplement = $IsTwosComplement\n";
-my $vax_float = (pack("d", 1) =~ /^[\x80\x10]\x40/);
-
sub is_valid_error
{
my $err = shift;
# Is this a stupid thing to do on VMS, VOS and other unusual platforms?
skip("-- the IEEE infinity model is unavailable in this configuration.", 1)
- if (($^O eq 'VMS') && !defined($Config{useieee}) || $vax_float);
+ if (($^O eq 'VMS') && !defined($Config{useieee}) || !$Config{d_double_has_inf});
skip("-- $^O has serious fp indigestion on w-packed infinities", 1)
if (
SKIP: {
skip("-- the full range of an IEEE double may not be available in this configuration.", 3)
- if (($^O eq 'VMS') && !defined($Config{useieee}) || $vax_float);
+ if (($^O eq 'VMS') && !defined($Config{useieee}) || !$Config{d_double_style_ieee});
skip("-- $^O does not like 2**1023", 3)
if (($^O eq 'ultrix'));
my @b = unpack "$t X[$t] $t", $p; # Extract, step back, extract again
is(scalar @b, 2 * scalar @a);
$b = "@b";
- $b =~ s/(?:17000+|16999+)\d+(e-45) /17$1 /gi; # stringification is gamble
+ $b =~ s/(?:17000+|16999+)\d+(e-0?45) /17$1 /gi; # stringification is gamble
is($b, "@a @a");
use warnings qw(NONFATAL all);;
is($warning, undef);
is(scalar @b, scalar @a);
$b = "@b";
- $b =~ s/(?:17000+|16999+)\d+(e-45) /17$1 /gi; # stringification is gamble
+ $b =~ s/(?:17000+|16999+)\d+(e-0?45) /17$1 /gi; # stringification is gamble
is($b, "@a");
}
is($x[1], $y[1], "checksum advance ok");
SKIP: {
- skip("-- VAX float", 1) if $vax_float;
+ skip("-- non-IEEE float", 1) if !$Config{d_double_style_ieee};
# verify that the checksum is not overflowed with C0
is(unpack("C0%128U", "abcd"), unpack("U0%128U", "abcd"), "checksum not overflowed");
}
is(pack("H40", $up_nul), $twenty_nuls,
"check pack H zero fills (utf8 source)");
}
+
+SKIP:
+{
+ # [perl #129149] the code below would write one past the end of the output
+ # buffer, only detected by ASAN, not by valgrind
+ $Config{ivsize} >= 8
+ or skip "[perl #129149] need 64-bit for this test", 1;
+ fresh_perl_is(<<'EOS', "ok\n", { stderr => 1 }, "pack W overflow");
+print pack("ucW", "0000", 0, 140737488355327) eq "\$,#`P,```\n\0\x{7fffffffffff}"
+ ? "ok\n" : "not ok\n";
+EOS
+}