summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'games-emulation')
-rw-r--r--games-emulation/dolphin/dolphin-5.0_p20220520-r2.ebuild6
-rw-r--r--games-emulation/dolphin/files/dolphin-5.0_p20220520-gcc-14.patch30
2 files changed, 35 insertions, 1 deletions
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 <peter@n8pjl.ca>
+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: