gtk-rs / gtk3-rs

Rust bindings for GTK 3
https://gtk-rs.org
MIT License
508 stars 90 forks source link

[BUG] Requesting an image from the clipboard if there is no image will crash the gtk app #620

Closed smailbarkouch closed 3 years ago

smailbarkouch commented 3 years ago

Bug description Its a very simple bug; if someone requests an image from the clipboard and there is no image, it will crash. When I read the documentation, it seems the second variable from the callback should be an option, but it isn't.

Clipboard::get(&gdk::SELECTION_CLIPBOARD).request_image(|_, pixbuf| {

});

Backtrace

``` thread 'main' panicked at 'assertion failed: ::glib::types::instance_of::(ptr as *const _)', /home/smailbarkouch/.cargo/registry/src/github.com-1ecc6299db9ec823/gdk-pixbuf-0.9.0/src/auto/pixbuf.rs:22:1 stack backtrace: 0: 0x5611aa335850 - std::backtrace_rs::backtrace::libunwind::trace::h34055254b57d8e79 at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/../../backtrace/src/backtrace/libunwind.rs:90:5 1: 0x5611aa335850 - std::backtrace_rs::backtrace::trace_unsynchronized::h8f1e3fbd9afff6ec at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5 2: 0x5611aa335850 - std::sys_common::backtrace::_print_fmt::h3a99a796b770c360 at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/sys_common/backtrace.rs:67:5 3: 0x5611aa335850 - ::fmt::h32d1f94a80615d18 at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/sys_common/backtrace.rs:46:22 4: 0x5611aa357f6c - core::fmt::write::h306731c068f7162c at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/fmt/mod.rs:1110:17 5: 0x5611aa330075 - std::io::Write::write_fmt::hd2fa90334eee2a21 at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/io/mod.rs:1588:15 6: 0x5611aa337a8b - std::sys_common::backtrace::_print::h5abaa2601a852287 at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/sys_common/backtrace.rs:49:5 7: 0x5611aa337a8b - std::sys_common::backtrace::print::h8d81445442bb638f at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/sys_common/backtrace.rs:36:9 8: 0x5611aa337a8b - std::panicking::default_hook::{{closure}}::hcfe804496a9fa747 at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panicking.rs:208:50 9: 0x5611aa337561 - std::panicking::default_hook::hbea8e3ccf2ba8901 at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panicking.rs:225:9 10: 0x5611aa338154 - std::panicking::rust_panic_with_hook::h7ee9e1a2d0f8975a at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panicking.rs:622:17 11: 0x5611aa337c07 - std::panicking::begin_panic_handler::{{closure}}::h8ab3b4491718b2c7 at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panicking.rs:517:13 12: 0x5611aa335d4c - std::sys_common::backtrace::__rust_end_short_backtrace::hd489062ffa586a9f at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/sys_common/backtrace.rs:141:18 13: 0x5611aa337b99 - rust_begin_unwind at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panicking.rs:515:5 14: 0x5611a97167f1 - core::panicking::panic_fmt::hca6330e3e14086b4 at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/panicking.rs:92:14 15: 0x5611a971673d - core::panicking::panic::h1a48d878ff3dcd40 at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/panicking.rs:50:5 16: 0x5611a9779c70 - >::from_glib_borrow::h2237d7d00727f127 at /home/smailbarkouch/.cargo/registry/src/github.com-1ecc6299db9ec823/glib-0.10.3/src/object.rs:915:17 17: 0x5611a97d235e - glib::translate::from_glib_borrow::hbc200a41ed37fab8 at /home/smailbarkouch/.cargo/registry/src/github.com-1ecc6299db9ec823/glib-0.10.3/src/translate.rs:1321:5 18: 0x5611a97380b9 - gtk::auto::clipboard::Clipboard::request_image::callback_func::ha89dcfe2ddcfa15d at /home/smailbarkouch/.cargo/registry/src/github.com-1ecc6299db9ec823/gtk-0.9.2/src/auto/clipboard.rs:83:26 19: 0x7f524d09c658 - 20: 0x7f524d09be87 - 21: 0x7f524cdb64f7 - 22: 0x7f524c885030 - g_signal_emit_valist 23: 0x7f524c8853ca - g_signal_emit_by_name 24: 0x7f524cf9fa1d - 25: 0x7f524cdb51e5 - 26: 0x7f524c885030 - g_signal_emit_valist 27: 0x7f524c8851a0 - g_signal_emit 28: 0x7f524d070ce5 - 29: 0x7f524cf0f36a - gtk_main_do_event 30: 0x7f524cc6e7f3 - 31: 0x7f524cca1cb4 - 32: 0x7f524c77410c - g_main_context_dispatch 33: 0x7f524c7c7b99 - 34: 0x7f524c771871 - g_main_context_iteration 35: 0x7f524c97b8b6 - g_application_run 36: 0x5611a97e6635 - ::run::h385eadaa864829c3 at /home/smailbarkouch/.cargo/registry/src/github.com-1ecc6299db9ec823/gio-0.9.1/src/application.rs:23:13 37: 0x5611a97218e3 - lockbook_desktop::main::ha7b2f977d0aa0bcc at /home/smailbarkouch/projects/work/lockbook/clients/linux/src/main.rs:76:5 38: 0x5611a975556b - core::ops::function::FnOnce::call_once::hc56cfa9f7033b70e at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ops/function.rs:227:5 39: 0x5611a976080e - std::sys_common::backtrace::__rust_begin_short_backtrace::h77c178cf6ac8f128 at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/sys_common/backtrace.rs:125:18 40: 0x5611a9737b91 - std::rt::lang_start::{{closure}}::h2abf2871989fc9fa at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/rt.rs:49:18 41: 0x5611aa338759 - core::ops::function::impls:: for &F>::call_once::h2aabc384aab89b7b at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ops/function.rs:259:13 42: 0x5611aa338759 - std::panicking::try::do_call::hc5fcacb7a85fc7b1 at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panicking.rs:401:40 43: 0x5611aa338759 - std::panicking::try::hb5d9603af3abbe3a at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panicking.rs:365:19 44: 0x5611aa338759 - std::panic::catch_unwind::h98fe6ac3925e64b4 at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panic.rs:434:14 45: 0x5611aa338759 - std::rt::lang_start_internal::h22ac7383c516f93e at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/rt.rs:34:21 46: 0x5611a9737b70 - std::rt::lang_start::he2dd41669b3cbe08 at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/rt.rs:48:5 47: 0x5611a97229dc - main 48: 0x7f524c34ab25 - __libc_start_main 49: 0x5611a9716fee - _start 50: 0x0 - ```
GuillaumeGomez commented 3 years ago

You're absolutely right.

I'll send a fix shortly.