diff options
author | Jeffrey Altman <jaltman@secure-endpoints.com> | 2007-06-22 18:58:09 +0000 |
---|---|---|
committer | Jeffrey Altman <jaltman@secure-endpoints.com> | 2007-06-22 18:58:09 +0000 |
commit | b3ce9032f0a19eaab43c3bbccb3bfc63635292ae (patch) | |
tree | 6b3b5aaabe7cf264e11a1d46312b6d3b56053546 /src/windows/identity/plugins | |
parent | 2edfc72bab12e4f7c745184e7795b60f7b567527 (diff) | |
download | krb5-b3ce9032f0a19eaab43c3bbccb3bfc63635292ae.tar.gz krb5-b3ce9032f0a19eaab43c3bbccb3bfc63635292ae.tar.xz krb5-b3ce9032f0a19eaab43c3bbccb3bfc63635292ae.zip |
Don't assume that WM_DESTROY is the last message to be received by a
window. Since the child windows are still alive and kicking by the
time the parent receives WM_DESTROY, it's still possible to receive
other messages after WM_DESTROY.
If we free any window specific data when handling WM_DESTROY, we
should reset the window data field as well, and check if we have a
valid pointer when retrieving the window data field later.
ticket: 5584
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@19627 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/windows/identity/plugins')
-rw-r--r-- | src/windows/identity/plugins/krb4/krb4configdlg.c | 22 | ||||
-rw-r--r-- | src/windows/identity/plugins/krb4/krb4newcreds.c | 11 | ||||
-rw-r--r-- | src/windows/identity/plugins/krb5/krb5configcc.c | 11 | ||||
-rw-r--r-- | src/windows/identity/plugins/krb5/krb5configid.c | 10 | ||||
-rw-r--r-- | src/windows/identity/plugins/krb5/krb5configids.c | 14 | ||||
-rw-r--r-- | src/windows/identity/plugins/krb5/krb5newcreds.c | 24 |
6 files changed, 89 insertions, 3 deletions
diff --git a/src/windows/identity/plugins/krb4/krb4configdlg.c b/src/windows/identity/plugins/krb4/krb4configdlg.c index 338cf7fa88..309bf542b0 100644 --- a/src/windows/identity/plugins/krb4/krb4configdlg.c +++ b/src/windows/identity/plugins/krb4/krb4configdlg.c @@ -113,6 +113,9 @@ krb4_ids_config_proc(HWND hwnd, d = (k4_ids_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + if (d == NULL) + break; + if (HIWORD(wParam) == BN_CLICKED) { k4_ids_check_mod(hwnd, d); } @@ -122,6 +125,9 @@ krb4_ids_config_proc(HWND hwnd, d = (k4_ids_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + if (d == NULL) + break; + if (HIWORD(wParam) == WMCFG_APPLY) { k4_ids_write_params(hwnd, d); } @@ -131,7 +137,11 @@ krb4_ids_config_proc(HWND hwnd, d = (k4_ids_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); - PFREE(d); + if (d) { + PFREE(d); + SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) 0); + } + break; } @@ -297,6 +307,9 @@ krb4_id_config_proc(HWND hwnd, d = (k4_id_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + if (d == NULL) + break; + if (wParam == MAKEWPARAM(IDC_CFG_GETTIX, BN_CLICKED)) { int gettix = 0; @@ -321,7 +334,7 @@ krb4_id_config_proc(HWND hwnd, d = (k4_id_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); - if (!d) + if (d == NULL) break; if (HIWORD(wParam) == WMCFG_APPLY) { @@ -343,10 +356,12 @@ krb4_id_config_proc(HWND hwnd, d = (k4_id_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); - if (!d) + if (d == NULL) break; PFREE(d); + + SetWindowLongPtr(hwnd, DWLP_USER, 0); } break; } @@ -531,6 +546,7 @@ krb4_confg_proc(HWND hwnd, if (d) { PFREE(d); + SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) 0); } break; diff --git a/src/windows/identity/plugins/krb4/krb4newcreds.c b/src/windows/identity/plugins/krb4/krb4newcreds.c index c2d477e0ee..9c200b618d 100644 --- a/src/windows/identity/plugins/krb4/krb4newcreds.c +++ b/src/windows/identity/plugins/krb4/krb4newcreds.c @@ -389,6 +389,9 @@ INT_PTR CALLBACK k4_nc_dlg_proc(HWND hwnd, d = (k4_dlg_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + if (d == NULL) + break; + k4_update_data(d); if (LOWORD(wParam) == IDC_NCK4_OBTAIN) { @@ -404,6 +407,10 @@ INT_PTR CALLBACK k4_nc_dlg_proc(HWND hwnd, { d = (k4_dlg_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + + if (d == NULL) + break; + k4_handle_wmnc_notify(d, wParam, lParam); } break; @@ -413,9 +420,13 @@ INT_PTR CALLBACK k4_nc_dlg_proc(HWND hwnd, d = (k4_dlg_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + if (d == NULL) + break; + d->nct->aux = 0; PFREE(d); + SetWindowLongPtr(hwnd, DWLP_USER, 0); } break; } diff --git a/src/windows/identity/plugins/krb5/krb5configcc.c b/src/windows/identity/plugins/krb5/krb5configcc.c index b2b498e685..13c5ac86b8 100644 --- a/src/windows/identity/plugins/krb5/krb5configcc.c +++ b/src/windows/identity/plugins/krb5/krb5configcc.c @@ -354,6 +354,10 @@ k5_ccconfig_dlgproc(HWND hwnd, case WM_COMMAND: d = (k5_ccc_dlg_data *) (DWORD_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + + if (d == NULL) + break; + switch(wParam) { case MAKEWPARAM(IDC_CFG_ADD, BN_CLICKED): { @@ -543,15 +547,22 @@ k5_ccconfig_dlgproc(HWND hwnd, d = (k5_ccc_dlg_data *) (DWORD_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + if (d == NULL) + break; + k5_free_file_ccs(&d->work); k5_free_file_ccs(&d->save); PFREE(d); + SetWindowLongPtr(hwnd, DWLP_USER, 0); return TRUE; case KHUI_WM_CFG_NOTIFY: d = (k5_ccc_dlg_data *) (DWORD_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + if (d == NULL) + break; + switch(HIWORD(wParam)) { case WMCFG_APPLY: if (k5_ccc_get_mod(d)) { diff --git a/src/windows/identity/plugins/krb5/krb5configid.c b/src/windows/identity/plugins/krb5/krb5configid.c index b5af1c2b2e..e730a4bb0a 100644 --- a/src/windows/identity/plugins/krb5/krb5configid.c +++ b/src/windows/identity/plugins/krb5/krb5configid.c @@ -324,6 +324,9 @@ k5_id_tab_dlgproc(HWND hwnd, d = (k5_id_dlg_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + if (d == NULL) + break; + if (HIWORD(wParam) == EN_CHANGE || HIWORD(wParam) == BN_CLICKED) k5_id_check_mod(hwnd, d); @@ -333,6 +336,9 @@ k5_id_tab_dlgproc(HWND hwnd, d = (k5_id_dlg_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + if (d == NULL) + break; + if (HIWORD(wParam) == WMCFG_APPLY) { k5_id_write_params(hwnd, d); } @@ -342,6 +348,9 @@ k5_id_tab_dlgproc(HWND hwnd, d = (k5_id_dlg_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + if (d == NULL) + break; + khui_tracker_kill_controls(&d->tc_life); khui_tracker_kill_controls(&d->tc_renew); @@ -349,6 +358,7 @@ k5_id_tab_dlgproc(HWND hwnd, kcdb_identity_release(d->ident); PFREE(d); + SetWindowLongPtr(hwnd, DWLP_USER, 0); break; } return FALSE; diff --git a/src/windows/identity/plugins/krb5/krb5configids.c b/src/windows/identity/plugins/krb5/krb5configids.c index 8d6afd4731..4699f056a2 100644 --- a/src/windows/identity/plugins/krb5/krb5configids.c +++ b/src/windows/identity/plugins/krb5/krb5configids.c @@ -221,6 +221,9 @@ k5_ids_tab_dlgproc(HWND hwnd, d = (k5_ids_dlg_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + if (d == NULL) + break; + if (HIWORD(wParam) == EN_CHANGE) { k5_ids_check_mod(d); } else if (HIWORD(wParam) == BN_CLICKED) { @@ -245,6 +248,10 @@ k5_ids_tab_dlgproc(HWND hwnd, case KHUI_WM_CFG_NOTIFY: d = (k5_ids_dlg_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + + if (d == NULL) + break; + if (HIWORD(wParam) == WMCFG_APPLY) { k5_ids_write_params(d); } @@ -254,6 +261,9 @@ k5_ids_tab_dlgproc(HWND hwnd, d = (k5_ids_dlg_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + if (d == NULL) + break; + khui_tracker_kill_controls(&d->tc_life); khui_tracker_kill_controls(&d->tc_renew); khui_tracker_kill_controls(&d->tc_life_min); @@ -262,9 +272,13 @@ k5_ids_tab_dlgproc(HWND hwnd, khui_tracker_kill_controls(&d->tc_renew_max); PFREE(d); + + SetWindowLongPtr(hwnd, DWLP_USER, 0); + break; } return FALSE; } + diff --git a/src/windows/identity/plugins/krb5/krb5newcreds.c b/src/windows/identity/plugins/krb5/krb5newcreds.c index d2458fe50e..b382096a07 100644 --- a/src/windows/identity/plugins/krb5/krb5newcreds.c +++ b/src/windows/identity/plugins/krb5/krb5newcreds.c @@ -122,6 +122,7 @@ k5_handle_wm_destroy(HWND hwnd, } PFREE(d); + SetWindowLongPtr(hwnd, DWLP_USER, 0); return TRUE; } @@ -184,6 +185,9 @@ k5_handle_wmnc_notify(HWND hwnd, d = (k5_dlg_data *)(LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + if (d == NULL) + return TRUE; + if (d->nc->subtype == KMSG_CRED_NEW_CREDS) { khui_tracker_reposition(&d->tc_lifetime); khui_tracker_reposition(&d->tc_renew); @@ -201,6 +205,9 @@ k5_handle_wmnc_notify(HWND hwnd, d = (k5_dlg_data *)(LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + if (d == NULL) + return TRUE; + if (d->nc->subtype == KMSG_CRED_PASSWORD) return TRUE; @@ -249,6 +256,10 @@ k5_handle_wmnc_notify(HWND hwnd, d = (k5_dlg_data *)(LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + + if (d == NULL) + return TRUE; + nc = d->nc; l = (khui_htwnd_link *) lParam; @@ -277,6 +288,9 @@ k5_handle_wmnc_notify(HWND hwnd, d = (k5_dlg_data *)(LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + if (d == NULL) + return TRUE; + nc = d->nc; khui_cw_find_type(nc, credtype_id_krb5, &nct); @@ -352,6 +366,8 @@ k5_handle_wmnc_notify(HWND hwnd, d = (k5_dlg_data *)(LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + if (d == NULL) + break; kmq_post_sub_msg(k5_sub, KMSG_CRED, KMSG_CRED_DIALOG_NEW_IDENTITY, @@ -365,6 +381,8 @@ k5_handle_wmnc_notify(HWND hwnd, d = (k5_dlg_data *)(LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + if (d == NULL) + break; if(!d->sync && d->nc->result == KHUI_NC_RESULT_PROCESS) { kmq_post_sub_msg(k5_sub, KMSG_CRED, @@ -382,6 +400,8 @@ k5_handle_wmnc_notify(HWND hwnd, d = (k5_dlg_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + if (d == NULL) + break; msg = (wchar_t *) lParam; @@ -420,6 +440,8 @@ k5_handle_wm_notify(HWND hwnd, pnmh->code == IPN_FIELDCHANGED) { d = (k5_dlg_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + if (d == NULL) + return 0; SendDlgItemMessage(hwnd, IDC_NCK5_PUBLICIP, IPM_GETADDRESS, @@ -444,6 +466,8 @@ k5_handle_wm_command(HWND hwnd, k5_dlg_data * d; d = (k5_dlg_data *)(LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); + if (d == NULL) + return FALSE; cid = LOWORD(wParam); notif = HIWORD(wParam); |