gtk-rs / gtk4-rs

Rust bindings of GTK 4
https://gtk-rs.org/gtk4-rs/
MIT License
1.85k stars 173 forks source link

[BUG] ` gtk4::FileChooserNative.files` cause crash #918

Open qarmin opened 2 years ago

qarmin commented 2 years ago
System:    Host: rafalkom Kernel: 5.13.0-28-generic x86_64 bits: 64 compiler: gcc v: 11.2.0 Desktop: GNOME 40.5 
           tk: GTK 3.24.30 wm: gnome-shell dm: GDM3 Distro: Ubuntu 21.10 (Impish Indri) 
RUST_BACKTRACE=full RUSTFLAGS=-Zsanitizer=address RUSTDOCFLAGS=-Zsanitizer=address cargo run  -Zbuild-std --target x86_64-unknown-linux-gnu

Bug description

for _i in 0..10{
let thing = FileChooserNative::default(); // FileChooserNative
thing.destroy();
thing.set_action(FileChooserAction::Save);
thing.remove_choice("54268");
thing.filters();
thing.set_create_folders(true);
thing.set_create_folders(false);
thing.set_current_name("4894");
thing.transient_for();
thing.remove_choice("-62840");
thing.file();
thing.files();
}

cause crash:

(crash_thing:34661): Gtk-WARNING **: 09:18:01.136: No choice with id 54268 found in GtkFileChooserNative 0x62100003cb40

(crash_thing:34661): Gtk-WARNING **: 09:18:01.136: No choice with id -62840 found in GtkFileChooserNative 0x62100003cb40

(crash_thing:34661): GLib-GIO-CRITICAL **: 09:18:01.136: g_list_model_get_n_items: assertion 'G_IS_LIST_MODEL (list)' failed

(crash_thing:34661): GLib-GObject-CRITICAL **: 09:18:01.136: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
thread 'main' panicked at 'assertion failed: ::glib::types::instance_of::<Self>(ptr as *const _)', /home/rafal/.cargo/git/checkouts/gtk-rs-core-7be42ca38bd6361c/3167871/gio/src/auto/list_model.rs:14:1
stack backtrace:
   0:     0x55c8d8669a35 - std::backtrace_rs::backtrace::libunwind::trace::h724e5bf51b0bdeb8
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x55c8d8669a35 - std::backtrace_rs::backtrace::trace_unsynchronized::hc82c40a0376ae7d7
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x55c8d85486fe - std::sys_common::backtrace::_print_fmt::hea603b8559ffc9b1
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:66:5
   3:     0x55c8d8547e69 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::he7d66fa55811781f
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:45:22
   4:     0x55c8d8918d15 - core::fmt::write::hb0ec546ccfce83c2
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/fmt/mod.rs:1190:17
   5:     0x55c8d8535888 - std::io::Write::write_fmt::h3693478b33b13fd5
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/io/mod.rs:1657:15
   6:     0x55c8d8547d64 - std::sys_common::backtrace::_print::hb480943d44f9ba68
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:48:5
   7:     0x55c8d85478ce - std::sys_common::backtrace::print::h2e68a689d2b6e66c
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:35:9
   8:     0x55c8d86f7929 - std::panicking::default_hook::{{closure}}::h883a506ba80935ac
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:295:22
   9:     0x55c8d86f6b86 - std::panicking::default_hook::he383a16fd745d86f
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:314:9
  10:     0x55c8d86fcf21 - std::panicking::rust_panic_with_hook::he55532a23f201724
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:698:17
  11:     0x55c8d86fc4b2 - std::panicking::begin_panic_handler::{{closure}}::h1c9db301df3acdad
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:586:13
  12:     0x55c8d854a81d - std::sys_common::backtrace::__rust_end_short_backtrace::h36cb68a2d331b01d
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:138:18
  13:     0x55c8d86fad2f - rust_begin_unwind
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:584:5
  14:     0x55c8d8908b36 - core::panicking::panic_fmt::h4457af6eff34ee1a
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/panicking.rs:143:14
  15:     0x55c8d89081f2 - core::panicking::panic::hf9f684f110c4f77c
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/panicking.rs:48:5
  16:     0x55c8d8137394 - <gio::auto::list_model::ListModel as glib::translate::FromGlibPtrFull<*mut gio_sys::GListModel>>::from_glib_full::h5eac9c19afb19310
                               at /home/rafal/.cargo/git/checkouts/gtk-rs-core-7be42ca38bd6361c/3167871/glib/src/object.rs:855:17
  17:     0x55c8d810cf8e - glib::translate::from_glib_full::h3ff90e1e1151a23f
                               at /home/rafal/.cargo/git/checkouts/gtk-rs-core-7be42ca38bd6361c/3167871/glib/src/translate.rs:1435:5
  18:     0x55c8d7ed609e - <O as gtk4::auto::file_chooser::FileChooserExt>::files::h555917ac618f73e9
                               at /home/rafal/.cargo/git/checkouts/gtk4-rs-e74ad56283dfeb5e/8f08e72/gtk4/src/auto/file_chooser.rs:211:13
  19:     0x55c8d7ed5c55 - crash_thing::crashes::hd10bc61ebee97362
                               at /home/rafal/Desktop/Untitled Folder/Project/src/main.rs:42:1
  20:     0x55c8d7ece708 - crash_thing::main::{{closure}}::h99d270ea5baaa0d1
                               at /home/rafal/Desktop/Untitled Folder/Project/src/main.rs:21:9
  21:     0x55c8d7ecda6b - <O as gio::auto::application::ApplicationExt>::connect_activate::activate_trampoline::h91258cdadfe72d33
                               at /home/rafal/.cargo/git/checkouts/gtk-rs-core-7be42ca38bd6361c/3167871/gio/src/auto/application.rs:604:13
  22:     0x7f98f0a33c0f - g_closure_invoke
  23:     0x7f98f0a4fea6 - <unknown>
  24:     0x7f98f0a51884 - g_signal_emit_valist
  25:     0x7f98f0a51ad3 - g_signal_emit
  26:     0x7f98f0b569d8 - <unknown>
  27:     0x7f98f0b56bb6 - g_application_run
  28:     0x55c8d7ecf169 - <O as gio::application::ApplicationExtManual>::run_with_args::h68786f7d87165c94
                               at /home/rafal/.cargo/git/checkouts/gtk-rs-core-7be42ca38bd6361c/3167871/gio/src/application.rs:30:13
  29:     0x55c8d7eceb58 - <O as gio::application::ApplicationExtManual>::run::h2fb226a192c21ca9
                               at /home/rafal/.cargo/git/checkouts/gtk-rs-core-7be42ca38bd6361c/3167871/gio/src/application.rs:23:9
  30:     0x55c8d7ed4fd7 - crash_thing::main::hc51bec7a5b8c7e89
                               at /home/rafal/Desktop/Untitled Folder/Project/src/main.rs:24:5
  31:     0x55c8d7ed87db - core::ops::function::FnOnce::call_once::h3fd7cdd36c90b094
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:227:5
  32:     0x55c8d7ed39a5 - std::sys_common::backtrace::__rust_begin_short_backtrace::h43935b03eb4cf297
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:122:18
  33:     0x55c8d7ecfd74 - std::rt::lang_start::{{closure}}::h1235bc9d4d9829c5
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/rt.rs:145:18
  34:     0x55c8d86ebc0e - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h43e2cfacab1d39a9
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:259:13
  35:     0x55c8d86f9cff - std::panicking::try::do_call::h7cf1c45ecf74e21c
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:492:40
  36:     0x55c8d8702eab - __rust_try
  37:     0x55c8d86f7fa3 - std::panicking::try::h11786f75c5e8f92c
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:456:19
  38:     0x55c8d84aa2ba - std::panic::catch_unwind::h4dd0051ef18d6daa
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panic.rs:137:14
  39:     0x55c8d854732c - std::rt::lang_start_internal::{{closure}}::h648b6b8193457c95
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/rt.rs:128:48
  40:     0x55c8d86f9afe - std::panicking::try::do_call::h13596aff24f38038
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:492:40
  41:     0x55c8d8702eab - __rust_try
  42:     0x55c8d86f8c9c - std::panicking::try::h59f157e493726e21
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:456:19
  43:     0x55c8d84aa5da - std::panic::catch_unwind::hec526b79455e9b90
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panic.rs:137:14
  44:     0x55c8d8546c7a - std::rt::lang_start_internal::hc671c8fded5192b3
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/rt.rs:128:20
  45:     0x55c8d7ecfcd6 - std::rt::lang_start::h46f1fcb3dbb7346d
                               at /home/rafal/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/rt.rs:144:17
  46:     0x55c8d7ed5dec - main
  47:     0x7f98f05effd0 - __libc_start_call_main
                               at ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
  48:     0x7f98f05f007d - __libc_start_main_impl
                               at ./csu/../csu/libc-start.c:409:3
  49:     0x55c8d7e3b1e5 - _start
  50:                0x0 - <unknown>

Issue found by fuzzer - https://github.com/qarmin/gtk-rs-fuzzer

bilelmoussaoui commented 2 years ago

Does it crash if you remove the destroy call?

sdroege commented 2 years ago

Probably not but some critical warnings will persist. If it doesn't crash without destroy() then this is still a problem though, but GTK people might disagree. It should be possible to call all API after dispose() without crashes.