summaryrefslogtreecommitdiff
path: root/dev-lang/perl/files/5.42.0/0002-class.c-gracefully-handle-reader-writer-after-strict.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dev-lang/perl/files/5.42.0/0002-class.c-gracefully-handle-reader-writer-after-strict.patch')
-rw-r--r--dev-lang/perl/files/5.42.0/0002-class.c-gracefully-handle-reader-writer-after-strict.patch87
1 files changed, 87 insertions, 0 deletions
diff --git a/dev-lang/perl/files/5.42.0/0002-class.c-gracefully-handle-reader-writer-after-strict.patch b/dev-lang/perl/files/5.42.0/0002-class.c-gracefully-handle-reader-writer-after-strict.patch
new file mode 100644
index 000000000000..5932329b7ee9
--- /dev/null
+++ b/dev-lang/perl/files/5.42.0/0002-class.c-gracefully-handle-reader-writer-after-strict.patch
@@ -0,0 +1,87 @@
+From 7ec9aea1c525aee1e1a638f943c4374945ea5b17 Mon Sep 17 00:00:00 2001
+Message-ID: <7ec9aea1c525aee1e1a638f943c4374945ea5b17.1763833678.git.sam@gentoo.org>
+In-Reply-To: <7dbc795b44eb54d41e1c6b30d8796525d65d52b5.1763833678.git.sam@gentoo.org>
+References: <7dbc795b44eb54d41e1c6b30d8796525d65d52b5.1763833678.git.sam@gentoo.org>
+From: Lukas Mai <lukasmai.403@gmail.com>
+Date: Wed, 30 Jul 2025 23:09:54 +0200
+Subject: [PATCH 2/4] class.c: gracefully handle reader/writer after 'strict'
+ error
+
+Fixes #23511.
+
+(cherry picked from commit 4e22a3d0e5f933b38e3fa1b98c904fe224001b63)
+---
+ MANIFEST | 1 +
+ class.c | 6 ++++--
+ t/class/gh23511.t | 23 +++++++++++++++++++++++
+ 3 files changed, 28 insertions(+), 2 deletions(-)
+ create mode 100644 t/class/gh23511.t
+
+diff --git a/MANIFEST b/MANIFEST
+index f530320dcc..d8c7b04816 100644
+--- a/MANIFEST
++++ b/MANIFEST
+@@ -5997,6 +5997,7 @@ t/class/construct.t See if class constructors work
+ t/class/destruct.t See if class destruction works
+ t/class/field.t See if class field declarations work
+ t/class/gh22169.t Test defining a class that previously failed to define
++t/class/gh23511.t Test defining a reader after a strict 'vars' violation
+ t/class/inherit.t See if class inheritance works
+ t/class/method.t See if class method declarations work
+ t/class/phasers.t See if class phaser blocks work
+diff --git a/class.c b/class.c
+index d6d801928d..a91656d469 100644
+--- a/class.c
++++ b/class.c
+@@ -1140,7 +1140,8 @@ apply_field_attribute_reader(pTHX_ PADNAME *pn, SV *value)
+ OP *nameop = newSVOP(OP_CONST, 0, value);
+
+ CV *cv = newATTRSUB(floor_ix, nameop, NULL, NULL, ops);
+- CvIsMETHOD_on(cv);
++ if (cv)
++ CvIsMETHOD_on(cv);
+ }
+
+ /* If '@_' is called "snail", then elements of it can be called "slugs"; i.e.
+@@ -1238,7 +1239,8 @@ apply_field_attribute_writer(pTHX_ PADNAME *pn, SV *value)
+ OP *nameop = newSVOP(OP_CONST, 0, value);
+
+ CV *cv = newATTRSUB(floor_ix, nameop, NULL, NULL, ops);
+- CvIsMETHOD_on(cv);
++ if (cv)
++ CvIsMETHOD_on(cv);
+ }
+
+ static struct {
+diff --git a/t/class/gh23511.t b/t/class/gh23511.t
+new file mode 100644
+index 0000000000..ae66269003
+--- /dev/null
++++ b/t/class/gh23511.t
+@@ -0,0 +1,23 @@
++#!./perl
++
++BEGIN {
++ chdir 't' if -d 't';
++ require './test.pl';
++ set_up_inc('../lib');
++}
++
++use v5.36;
++use feature 'class';
++no warnings 'experimental::class';
++
++# this used to segfault: GH #23511
++eval <<'CLASS';
++class MyTest {
++ $id = 6;
++ field $f1 :reader;
++ field $f2 :writer;
++}
++CLASS
++like $@, qr/^Global symbol "\$id" requires explicit package name /, "we get the expected 'undeclared variable' error";
++
++done_testing;
+--
+2.52.0
+