diff options
author | Pierre Ossman <ossman@cendio.se> | 2025-02-06 09:22:30 +0100 |
---|---|---|
committer | Pierre Ossman <ossman@cendio.se> | 2025-02-06 09:22:30 +0100 |
commit | 7dd01ea947142ed0173f58d8e9a2c9fbbbddefde (patch) | |
tree | 2f65555dc31bc86f5cdfb0944bd2916e1bd033ad /vncviewer | |
parent | 402f079920033631c14ec1a38194b57e9fb758c4 (diff) | |
download | tigervnc-7dd01ea947142ed0173f58d8e9a2c9fbbbddefde.tar.gz tigervnc-7dd01ea947142ed0173f58d8e9a2c9fbbbddefde.zip |
Don't crash when closing auth dialog
We use button_cb for the dialog's callback as well, to handle the user
closing the window. However, Fl_Window::window() doesn't return the
window itself, but its parent window. Which it doesn't have, so we get
NULL.
Diffstat (limited to 'vncviewer')
-rw-r--r-- | vncviewer/UserDialog.cxx | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/vncviewer/UserDialog.cxx b/vncviewer/UserDialog.cxx index c6cc02f7..088b5e29 100644 --- a/vncviewer/UserDialog.cxx +++ b/vncviewer/UserDialog.cxx @@ -65,8 +65,16 @@ std::string UserDialog::savedPassword; static long ret_val = 0; static void button_cb(Fl_Widget *widget, long val) { + Fl_Window* win; + ret_val = val; - widget->window()->hide(); + + assert(widget != nullptr); + win = dynamic_cast<Fl_Window*>(widget); + if (win == nullptr) + win = widget->window(); + assert(win != nullptr); + win->hide(); } UserDialog::UserDialog() |