summaryrefslogtreecommitdiff
path: root/ext/XS-Typemap/t/Typemap.t
diff options
context:
space:
mode:
Diffstat (limited to 'ext/XS-Typemap/t/Typemap.t')
-rw-r--r--ext/XS-Typemap/t/Typemap.t20
1 files changed, 18 insertions, 2 deletions
diff --git a/ext/XS-Typemap/t/Typemap.t b/ext/XS-Typemap/t/Typemap.t
index 27b40860fd..49ac479884 100644
--- a/ext/XS-Typemap/t/Typemap.t
+++ b/ext/XS-Typemap/t/Typemap.t
@@ -6,10 +6,11 @@ BEGIN {
}
}
-use Test::More tests => 152;
+use Test::More tests => 156;
use strict;
-use warnings;
+#catch WARN_INTERNAL type errors, and anything else unexpected
+use warnings FATAL => 'all';
use XS::Typemap;
pass();
@@ -213,6 +214,7 @@ is( T_PV("a string"), "a string");
is( T_PV(52), 52);
ok !defined T_PV_null, 'RETVAL = NULL returns undef for char*';
{
+ use warnings NONFATAL => 'all';
my $uninit;
local $SIG{__WARN__} = sub { ++$uninit if shift =~ /uninit/ };
() = ''.T_PV_null;
@@ -393,6 +395,16 @@ if (defined $fh) {
}
}
+$fh = "FOO";
+T_STDIO_open_ret_in_arg( $testfile, $fh);
+ok( $fh ne "FOO", 'return io in arg open succeeds');
+ok( print($fh "first line\n"), 'can print to return io in arg');
+ok( close($fh), 'can close return io in arg');
+$fh = "FOO";
+#now with a bad file name to make sure $fh is written to on failure
+T_STDIO_open_ret_in_arg( "", $fh);
+ok( !defined$fh, 'return io in arg open failed successfully');
+
# T_INOUT
note("T_INOUT");
SCOPE: {
@@ -439,6 +451,10 @@ SCOPE: {
ok(!close $fh2);
}
+# Perl RT #124181 SEGV due to double free in typemap
+# "Attempt to free unreferenced scalar"
+%{*{main::XS::}{HASH}} = ();
+
sub is_approx {
my ($l, $r, $n) = @_;
if (not defined $l or not defined $r) {