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
