From 153b159a2a3d90be6cc000087afb4440dce3ae97 Mon Sep 17 00:00:00 2001 From: otaxhu Date: Fri, 16 May 2025 17:49:26 -0400 Subject: [PATCH 1/2] fix(event_controller): set_static_name UAF fixed, name now has static lifetime --- gtk4/Gir.toml | 9 ++++++++- gtk4/src/auto/event_controller.rs | 12 ------------ gtk4/src/event_controller.rs | 24 ++++++++++++++++++++++++ gtk4/src/lib.rs | 1 + gtk4/src/prelude.rs | 1 + 5 files changed, 34 insertions(+), 13 deletions(-) create mode 100644 gtk4/src/event_controller.rs diff --git a/gtk4/Gir.toml b/gtk4/Gir.toml index 5deec8e0757e..0037f183a0fb 100644 --- a/gtk4/Gir.toml +++ b/gtk4/Gir.toml @@ -103,7 +103,6 @@ generate = [ "Gtk.EditableProperties", "Gtk.EmojiChooser", "Gtk.EntryIconPosition", - "Gtk.EventController", "Gtk.EventControllerFocus", "Gtk.EventControllerMotion", "Gtk.EventControllerScrollFlags", @@ -1174,6 +1173,14 @@ status = "generate" rename = "entry" manual = true # upcast to Entry +[[object]] +name = "Gtk.EventController" +status = "generate" +manual_traits = ["EventControllerExtManual"] + [[object.function]] + name = "set_static_name" + manual = true # to make use of a static lifetimed string + [[object]] name = "Gtk.EventControllerKey" status = "generate" diff --git a/gtk4/src/auto/event_controller.rs b/gtk4/src/auto/event_controller.rs index 5e5b7b4edb88..40dfc8dbe8a2 100644 --- a/gtk4/src/auto/event_controller.rs +++ b/gtk4/src/auto/event_controller.rs @@ -142,18 +142,6 @@ pub trait EventControllerExt: IsA + 'static { } } - #[cfg(feature = "v4_8")] - #[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))] - #[doc(alias = "gtk_event_controller_set_static_name")] - fn set_static_name(&self, name: Option<&str>) { - unsafe { - ffi::gtk_event_controller_set_static_name( - self.as_ref().to_glib_none().0, - name.to_glib_none().0, - ); - } - } - #[doc(alias = "name")] fn connect_name_notify(&self, f: F) -> SignalHandlerId { unsafe extern "C" fn notify_name_trampoline< diff --git a/gtk4/src/event_controller.rs b/gtk4/src/event_controller.rs new file mode 100644 index 000000000000..66c637033f1f --- /dev/null +++ b/gtk4/src/event_controller.rs @@ -0,0 +1,24 @@ +// Take a look at the license at the top of the repository in the LICENSE file. + +#[cfg(feature = "v4_8")] +use glib::translate::*; + +#[cfg(feature = "v4_8")] +use crate::ffi; +use crate::{prelude::*, EventController}; + +pub trait EventControllerExtManual: IsA + 'static { + #[cfg(feature = "v4_8")] + #[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))] + #[doc(alias = "gtk_event_controller_set_static_name")] + fn set_static_name(&self, name: Option<&'static str>) { + unsafe { + ffi::gtk_event_controller_set_static_name( + self.as_ref().to_glib_none().0, + name.to_glib_none().0, + ); + } + } +} + +impl> EventControllerExtManual for O {} diff --git a/gtk4/src/lib.rs b/gtk4/src/lib.rs index 1306bf03930e..5f1fad05b78b 100644 --- a/gtk4/src/lib.rs +++ b/gtk4/src/lib.rs @@ -139,6 +139,7 @@ mod entry; mod entry_buffer; mod entry_completion; mod enums; +mod event_controller; mod event_controller_key; mod expression_watch; mod file_chooser; diff --git a/gtk4/src/prelude.rs b/gtk4/src/prelude.rs index d2442a3afd37..c4d6fc119ba8 100644 --- a/gtk4/src/prelude.rs +++ b/gtk4/src/prelude.rs @@ -21,6 +21,7 @@ pub use crate::{ editable::EditableExtManual, entry::EntryExtManual, entry_buffer::EntryBufferExtManual, + event_controller::EventControllerExtManual, expression::{GObjectPropertyExpressionExt, IsExpression}, file_chooser::FileChooserExtManual, font_chooser::FontChooserExtManual, From 389477fbeb7ef0068e1b244445e91483d8c88bd3 Mon Sep 17 00:00:00 2001 From: Oscar Pernia <93091522+otaxhu@users.noreply.github.com> Date: Mon, 19 May 2025 10:50:23 -0400 Subject: [PATCH 2/2] fix(event_controller): using GStr instead of str MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sebastian Dröge --- gtk4/src/event_controller.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gtk4/src/event_controller.rs b/gtk4/src/event_controller.rs index 66c637033f1f..970e637c2721 100644 --- a/gtk4/src/event_controller.rs +++ b/gtk4/src/event_controller.rs @@ -11,7 +11,7 @@ pub trait EventControllerExtManual: IsA + 'static { #[cfg(feature = "v4_8")] #[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))] #[doc(alias = "gtk_event_controller_set_static_name")] - fn set_static_name(&self, name: Option<&'static str>) { + fn set_static_name(&self, name: Option<&'static glib::GStr>) { unsafe { ffi::gtk_event_controller_set_static_name( self.as_ref().to_glib_none().0,