summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Cook <tony@develop-help.com>2023-05-02 16:42:35 +1000
committerLeon Timmermans <fawaka@gmail.com>2023-05-09 12:40:13 +0200
commitaf53f37bb3d0cf50c62f4c7748cf2b6958461ec7 (patch)
tree05163e241a297b6b79e9b04bef2f0efe752a3da6
parentebf40d2dd691391f760387f7a1c53f4822c23bbf (diff)
downloadperl-af53f37bb3d0cf50c62f4c7748cf2b6958461ec7.tar.gz
EU::PXS: initialize $self correctly in EU::PXS::Utilities::death()
Encountered as an attempt to reference "2" from mis-typed parameter type.
-rw-r--r--MANIFEST1
-rw-r--r--dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Utilities.pm2
-rw-r--r--dist/ExtUtils-ParseXS/t/001-basic.t20
-rw-r--r--dist/ExtUtils-ParseXS/t/XSNoMap.xs16
4 files changed, 37 insertions, 2 deletions
diff --git a/MANIFEST b/MANIFEST
index 533f5a6a1c..87fcd44f94 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -3964,6 +3964,7 @@ dist/ExtUtils-ParseXS/t/XSFalsePositive.xs Test file for ExtUtils::ParseXS tes
dist/ExtUtils-ParseXS/t/XSFalsePositive2.xs Test file for ExtUtils::ParseXS tests
dist/ExtUtils-ParseXS/t/XSInclude.xsh Test file for ExtUtils::ParseXS tests
dist/ExtUtils-ParseXS/t/XSMore.xs Test file for ExtUtils::ParseXS tests
+dist/ExtUtils-ParseXS/t/XSNoMap.xs
dist/ExtUtils-ParseXS/t/XSTest.pm Test file for ExtUtils::ParseXS tests
dist/ExtUtils-ParseXS/t/XSTest.xs Test file for ExtUtils::ParseXS tests
dist/ExtUtils-ParseXS/t/XSTightDirectives.xs Test file for ExtUtils::ParseXS tests
diff --git a/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Utilities.pm b/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Utilities.pm
index 054cbb26fb..904f53324e 100644
--- a/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Utilities.pm
+++ b/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Utilities.pm
@@ -771,7 +771,7 @@ sub blurt {
=cut
sub death {
- my $self = (@_);
+ my ($self) = (@_);
my $message = _MsgHint(@_,"");
if ($self->{die_on_error}) {
die $message;
diff --git a/dist/ExtUtils-ParseXS/t/001-basic.t b/dist/ExtUtils-ParseXS/t/001-basic.t
index d983476a5a..630da799b1 100644
--- a/dist/ExtUtils-ParseXS/t/001-basic.t
+++ b/dist/ExtUtils-ParseXS/t/001-basic.t
@@ -1,7 +1,7 @@
#!/usr/bin/perl
use strict;
-use Test::More tests => 28;
+use Test::More tests => 30;
use Config;
use DynaLoader;
use ExtUtils::CBuilder;
@@ -350,6 +350,24 @@ EOF_CONTENT
"The version in perlxs.pod should match the version of ExtUtils::ParseXS");
}
+{
+ my $pxs = ExtUtils::ParseXS->new;
+ tie *FH, 'Foo';
+ my $exception;
+ my $stderr = PrimitiveCapture::capture_stderr(sub {
+ eval {
+ $pxs->process_file(
+ filename => "XSNoMap.xs",
+ output => \*FH,
+ );
+ 1;
+ } or $exception = $@;
+ });
+ is($stderr, undef, "should fail to parse");
+ like($exception, qr/Could not find a typemap for C type 'S \*'/,
+ "check we throw rather than trying to deref '2'");
+}
+
#####################################################################
sub Foo::TIEHANDLE { bless {}, 'Foo' }
diff --git a/dist/ExtUtils-ParseXS/t/XSNoMap.xs b/dist/ExtUtils-ParseXS/t/XSNoMap.xs
new file mode 100644
index 0000000000..3ec199f349
--- /dev/null
+++ b/dist/ExtUtils-ParseXS/t/XSNoMap.xs
@@ -0,0 +1,16 @@
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+typedef struct { int a; } S;
+
+static void
+xsnomap_unknown(S* p) {
+}
+
+MODULE = XSNoMap PACKAGE = XSNoMap PREFIX = xsnomap_
+
+PROTOTYPES: DISABLE
+
+void
+xsnomap_unknown(S *arg)