From 7f49d3b6d7569509f35edd9f821cf468510b2ba6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= Date: Tue, 15 Jan 2019 09:01:30 +0100 Subject: [PATCH] Fix un undefined C behavior in NULL pointer arithmetics --- ...warnings.pl-Fix-undefined-C-behavior.patch | 83 +++++++++++++++++++ perl.spec | 7 ++ 2 files changed, 90 insertions(+) create mode 100644 perl-5.29.6-regen-warnings.pl-Fix-undefined-C-behavior.patch diff --git a/perl-5.29.6-regen-warnings.pl-Fix-undefined-C-behavior.patch b/perl-5.29.6-regen-warnings.pl-Fix-undefined-C-behavior.patch new file mode 100644 index 0000000..0617ce3 --- /dev/null +++ b/perl-5.29.6-regen-warnings.pl-Fix-undefined-C-behavior.patch @@ -0,0 +1,83 @@ +From 8c165a32b7cc4f2a147a37c920a96f1b09b2386d Mon Sep 17 00:00:00 2001 +From: Karl Williamson +Date: Sun, 30 Dec 2018 21:29:07 -0700 +Subject: [PATCH] regen/warnings.pl: Fix undefined C behavior +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This fixes compiler warnings "performing pointer arithmetic on a null +pointer has undefined behavior" + +There are several ways to fix this. This one was suggested by +Tomasz Konojacki++. Instead of trying to point to address 1 and 2, two +variables are created, and we point to them. const is cast away. + +Signed-off-by: Petr Písař +--- + globvar.sym | 2 ++ + perl.h | 5 +++++ + regen/warnings.pl | 4 ++-- + warnings.h | 4 ++-- + 4 files changed, 11 insertions(+), 4 deletions(-) + +diff --git a/globvar.sym b/globvar.sym +index 6fb387ca0a..476f4ca095 100644 +--- a/globvar.sym ++++ b/globvar.sym +@@ -83,4 +83,6 @@ PL_warn_nl + PL_warn_nosemi + PL_warn_reserved + PL_warn_uninit ++PL_WARN_ALL ++PL_WARN_NONE + PL_watch_pvx +diff --git a/perl.h b/perl.h +index 43b42a8aa5..dd66b120af 100644 +--- a/perl.h ++++ b/perl.h +@@ -4454,6 +4454,11 @@ EXTCONST char PL_Zero[] + EXTCONST char PL_hexdigit[] + INIT("0123456789abcdef0123456789ABCDEF"); + ++EXTCONST STRLEN PL_WARN_ALL ++ INIT(0); ++EXTCONST STRLEN PL_WARN_NONE ++ INIT(0); ++ + /* This is constant on most architectures, a global on OS/2 */ + #ifndef OS2 + EXTCONST char PL_sh_path[] +diff --git a/regen/warnings.pl b/regen/warnings.pl +index 9c01e6762f..d244160b3e 100644 +--- a/regen/warnings.pl ++++ b/regen/warnings.pl +@@ -322,8 +322,8 @@ my ($index, $warn_size); + #define G_WARN_ALL_MASK (G_WARN_ALL_ON|G_WARN_ALL_OFF) + + #define pWARN_STD NULL +-#define pWARN_ALL (((STRLEN*)0)+1) /* use warnings 'all' */ +-#define pWARN_NONE (((STRLEN*)0)+2) /* no warnings 'all' */ ++#define pWARN_ALL (STRLEN *) &PL_WARN_ALL /* use warnings 'all' */ ++#define pWARN_NONE (STRLEN *) &PL_WARN_NONE /* no warnings 'all' */ + + #define specialWARN(x) ((x) == pWARN_STD || (x) == pWARN_ALL || \ + (x) == pWARN_NONE) +diff --git a/warnings.h b/warnings.h +index e0c12ed403..58f52272de 100644 +--- a/warnings.h ++++ b/warnings.h +@@ -18,8 +18,8 @@ + #define G_WARN_ALL_MASK (G_WARN_ALL_ON|G_WARN_ALL_OFF) + + #define pWARN_STD NULL +-#define pWARN_ALL (((STRLEN*)0)+1) /* use warnings 'all' */ +-#define pWARN_NONE (((STRLEN*)0)+2) /* no warnings 'all' */ ++#define pWARN_ALL (STRLEN *) &PL_WARN_ALL /* use warnings 'all' */ ++#define pWARN_NONE (STRLEN *) &PL_WARN_NONE /* no warnings 'all' */ + + #define specialWARN(x) ((x) == pWARN_STD || (x) == pWARN_ALL || \ + (x) == pWARN_NONE) +-- +2.17.2 + diff --git a/perl.spec b/perl.spec index b0910f7..7334b51 100644 --- a/perl.spec +++ b/perl.spec @@ -235,6 +235,10 @@ Patch46: perl-5.29.6-First-eof-should-return-true.patch # Fix a crash when compiling a malformed form, RT#132158, in upstream after 5.29.6 Patch47: perl-5.29.6-perl-132158-abort-compilation-if-we-see-an-error-com.patch +# Fix un undefined C behavior in NULL pointer arithmetics, RT#133223, +# in upstream after 5.29.6 +Patch48: perl-5.29.6-regen-warnings.pl-Fix-undefined-C-behavior.patch + # Link XS modules to libperl.so with EU::CBuilder on Linux, bug #960048 Patch200: perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-CBuilder-on-Li.patch @@ -2836,6 +2840,7 @@ Perl extension for Version Objects %patch45 -p1 %patch46 -p1 %patch47 -p1 +%patch48 -p1 %patch200 -p1 %patch201 -p1 @@ -2877,6 +2882,7 @@ perl -x patchlevel.h \ 'Fedora Patch44: Fix reporting a line number for non-terminated prototypes (RT#133524)' \ 'Fedora Patch45: Fix first eof() return value (RT#133721)' \ 'Fedora Patch47: Fix a crash when compiling a malformed form (RT#132158)' \ + 'Fedora Patch48: Fix un undefined C behavior in NULL pointer arithmetics (RT#133223)' \ 'Fedora Patch200: Link XS modules to libperl.so with EU::CBuilder on Linux' \ 'Fedora Patch201: Link XS modules to libperl.so with EU::MM on Linux' \ %{nil} @@ -5171,6 +5177,7 @@ popd - Fix reporting a line number for non-terminated prototypes (RT#133524) - Fix first eof() return value (RT#133721) - Fix a crash when compiling a malformed form (RT#132158) +- Fix un undefined C behavior in NULL pointer arithmetics (RT#133223) * Mon Jan 14 2019 Björn Esser - 4:5.28.1-429 - Rebuilt for libcrypt.so.2 (#1666033)