commit:     1e3866a781cb9f13107b17d346ce03fcbc09e10c
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  2 17:50:39 2024 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sun Jun  2 17:54:06 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=1e3866a7

games-emulation/dolphin: Backport gcc-14 build fix

Thanks to Kostadin Shishmanov for finding the pull request.

Closes: https://bugs.gentoo.org/933203
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 .../dolphin/dolphin-5.0_p20220520-r2.ebuild        |  6 ++++-
 .../files/dolphin-5.0_p20220520-gcc-14.patch       | 30 ++++++++++++++++++++++
 2 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/games-emulation/dolphin/dolphin-5.0_p20220520-r2.ebuild 
b/games-emulation/dolphin/dolphin-5.0_p20220520-r2.ebuild
index c1f43ed2cbd5..eb77bc5735c5 100644
--- a/games-emulation/dolphin/dolphin-5.0_p20220520-r2.ebuild
+++ b/games-emulation/dolphin/dolphin-5.0_p20220520-r2.ebuild
@@ -35,7 +35,11 @@ IUSE="
        profile pulseaudio systemd upnp vulkan
 "
 
-PATCHES=("${FILESDIR}/${P}-libfmt-9.0.0-fix-build.patch")
+PATCHES=(
+       "${FILESDIR}/${P}-libfmt-9.0.0-fix-build.patch"
+       # https://github.com/dolphin-emu/dolphin/pull/12575
+       "${FILESDIR}/${P}-gcc-14.patch"
+)
 
 RDEPEND="
        app-arch/bzip2:=

diff --git a/games-emulation/dolphin/files/dolphin-5.0_p20220520-gcc-14.patch 
b/games-emulation/dolphin/files/dolphin-5.0_p20220520-gcc-14.patch
new file mode 100644
index 000000000000..44ffb50ae257
--- /dev/null
+++ b/games-emulation/dolphin/files/dolphin-5.0_p20220520-gcc-14.patch
@@ -0,0 +1,30 @@
+From 3da2e15e6b95f02f66df461e87c8b896e450fdab Mon Sep 17 00:00:00 2001
+From: Peter Lafreniere <[email protected]>
+Date: Sun, 11 Feb 2024 20:55:31 -0500
+Subject: [PATCH] IOFile: avoid clearing errors on null file struct
+
+When performing a default compilation with recent GCC & glibc,
+the use of -Werror=nonnull causes a build error.
+
+The error is given as IOFile::ClearError() can call std::clearerr()
+with a null file, which can trigger a null-pointer dereference in libc.
+
+Change the std::clearerr() call to be conditional on a file being open.
+---
+ Source/Core/Common/IOFile.h | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/Source/Core/Common/IOFile.h b/Source/Core/Common/IOFile.h
+index 4b12c3188853..b5895333b1be 100644
+--- a/Source/Core/Common/IOFile.h
++++ b/Source/Core/Common/IOFile.h
+@@ -116,7 +116,8 @@ class IOFile
+   void ClearError()
+   {
+     m_good = true;
+-    std::clearerr(m_file);
++    if (IsOpen())
++      std::clearerr(m_file);
+   }
+ 
+ private:

Reply via email to