commit:     2c5af6ad58efbe57449ebc249d71374e62b1c435
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Fri Jul  4 20:35:34 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Jul  4 20:37:38 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2c5af6ad

sys-block/gparted: fix crash w/ broken icons

In this case, the crash seems to have been because gdk-pixbuf was broken
(where the root cause is being investigated in bug #959479). But nonetheless,
should it be broken for any reason (diff reason in Debian where this first
came up), we shouldn't crash. Backport the fix for that.

Bug: https://bugs.gentoo.org/959479
Closes: https://bugs.gentoo.org/959434
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../gparted-1.6.0-handle-failing-pixbuf.patch      | 79 ++++++++++++++++++++++
 ...ted-1.6.0-r1.ebuild => gparted-1.6.0-r2.ebuild} |  2 +-
 2 files changed, 80 insertions(+), 1 deletion(-)

diff --git a/sys-block/gparted/files/gparted-1.6.0-handle-failing-pixbuf.patch 
b/sys-block/gparted/files/gparted-1.6.0-handle-failing-pixbuf.patch
new file mode 100644
index 000000000000..5b4cf0b0f487
--- /dev/null
+++ b/sys-block/gparted/files/gparted-1.6.0-handle-failing-pixbuf.patch
@@ -0,0 +1,79 @@
+https://bugs.gentoo.org/959434
+https://bugs.debian.org/984953
+https://gitlab.gnome.org/GNOME/gparted/-/issues/282
+https://gitlab.gnome.org/GNOME/gparted/-/commit/6cd9690426ba576a22a5a48cae5684c542629591
+
+From 6cd9690426ba576a22a5a48cae5684c542629591 Mon Sep 17 00:00:00 2001
+From: Mike Fleetwood <[email protected]>
+Date: Sun, 1 Jun 2025 15:08:57 +0100
+Subject: [PATCH] Fix crash from dereferencing a nullptr in Utils::mk_pixbuf()
+ (#282)
+
+Debian bug 984953 [1] reported a crash from a nullptr dereference.  The
+captured backtrace was:
+    (gdb) backtrace
+    #0  Gdk::Pixbuf::gobj (this=0x0) at ../gdkmm/pixbuf.h:389
+    #1  Gdk::Pixbuf::get_width (this=0x0) at pixbuf.cc:517
+    #2  0x0000aaaaaab89ca4 in GParted::Utils::mk_pixbuf (widget=..., 
stock_id=..., icon_size=..., icon_size@entry=...) at 
/usr/include/glibmm-2.4/glibmm/refptr.h:259
+    #3  0x0000aaaaaab92020 in GParted::Win_GParted::refresh_combo_devices 
(this=0xffffffffe960) at /usr/include/gtkmm-3.0/gtkmm/enums.h:2870
+    #4  0x0000aaaaaab95980 in 
GParted::Win_GParted::menu_gparted_refresh_devices (this=<optimized out>) at 
Win_GParted.cc:1674
+    #5  0x0000aaaaaab95e2c in GParted::Win_GParted::initial_device_refresh 
(data=<optimized out>) at Win_GParted.cc:1605
+    #6  0x0000fffff6b8dab4 in g_main_dispatch (context=0xaaaaaaca6f10) at 
../../../glib/gmain.c:3325
+    #7  g_main_context_dispatch (context=0xaaaaaaca6f10) at 
../../../glib/gmain.c:4043
+    #8  0x0000fffff6b8de5c in g_main_context_iterate (context=0xaaaaaaca6f10, 
block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at 
../../../glib/gmain.c:4119
+    #9  0x0000fffff6b8e1b0 in g_main_loop_run (loop=loop@entry=0xaaaaabb23860) 
at ../../../glib/gmain.c:4317
+    #10 0x0000fffff70b98f0 in gtk_main () at ../../../../gtk/gtkmain.c:1328
+    #11 0x0000aaaaaab2138c in main (argc=<optimized out>, argv=<optimized 
out>) at main.cc:62
+
+GParted is still using Gtk stock icons.  All attempts at re-creating
+this crash by deleting icon files failed because if the desktop theme
+doesn't provide the icons, the Gtk library falls back on using the
+builtin copies of the stock icons instead.  It is unknown how the
+reported managed to trigger this crash.  The only known way to reproduce
+this crash is by changing the GParted source code to request a
+non-existent stock icon.  This change was used:
+    --- a/src/Win_GParted.cc
+    +++ b/src/Win_GParted.cc
+    @@ -743,8 +743,9 @@ void Win_GParted::refresh_combo_devices()
+         {
+             //combo...
+             treerow = *( liststore_devices ->append() ) ;
+    +        static const Gtk::BuiltinStockID UNKNOWN = { 
((GtkStock)"unknown") };
+             treerow[ treeview_devices_columns .icon ] =
+    -            Utils::mk_pixbuf(*this, Gtk::Stock::HARDDISK, 
Gtk::ICON_SIZE_LARGE_TOOLBAR);
+    +            Utils::mk_pixbuf(*this, UNKNOWN, 
Gtk::ICON_SIZE_LARGE_TOOLBAR);
+             treerow[ treeview_devices_columns .device ] = devices[ i ] 
.get_path() ;
+             treerow[ treeview_devices_columns .size ] = "(" + 
Utils::format_size( devices[ i ] .length, devices[ i ] .sector_size ) + ")" ;
+
+The bug in Utils::mk_pixbuf() is that render_icon_pixbuf() returned a
+nullptr and was then dereferenced a few lines lower by
+theme_icon->get_width().
+
+Testing this fix with the above crash reproducing change applied results
+in the GUI simply not showing an icon with each device name in the
+device combo box selector.
+
+[1] libgtkmm-3.0-1v5: GParted crashes on Gdk::Pixbuf::get_width()
+    const ()
+    https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=984953
+
+Closes #282 - Crash due to not checking for failure to load icon
+---
+ src/Utils.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/Utils.cc b/src/Utils.cc
+index 4c4d781a..a9c2e3e1 100644
+--- a/src/Utils.cc
++++ b/src/Utils.cc
+@@ -177,6 +177,8 @@ Glib::RefPtr<Gdk::Pixbuf> Utils::mk_pixbuf(Gtk::Widget& 
widget,
+                                            Gtk::IconSize icon_size)
+ {
+       Glib::RefPtr<Gdk::Pixbuf> theme_icon = 
widget.render_icon_pixbuf(stock_id, icon_size);
++      if (! theme_icon)
++              return theme_icon;
+ 
+       // Ensure icon size
+       int width = 0;
+-- 
+GitLab

diff --git a/sys-block/gparted/gparted-1.6.0-r1.ebuild 
b/sys-block/gparted/gparted-1.6.0-r2.ebuild
similarity index 98%
rename from sys-block/gparted/gparted-1.6.0-r1.ebuild
rename to sys-block/gparted/gparted-1.6.0-r2.ebuild
index e6b5ff10483d..40235e7a54ce 100644
--- a/sys-block/gparted/gparted-1.6.0-r1.ebuild
+++ b/sys-block/gparted/gparted-1.6.0-r2.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2024 Gentoo Authors
+# Copyright 1999-2025 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=8

Reply via email to