summaryrefslogtreecommitdiffstats
path: root/src/windows/identity/plugins
diff options
context:
space:
mode:
authorJeffrey Altman <jaltman@secure-endpoints.com>2007-06-22 18:58:09 +0000
committerJeffrey Altman <jaltman@secure-endpoints.com>2007-06-22 18:58:09 +0000
commitb3ce9032f0a19eaab43c3bbccb3bfc63635292ae (patch)
tree6b3b5aaabe7cf264e11a1d46312b6d3b56053546 /src/windows/identity/plugins
parent2edfc72bab12e4f7c745184e7795b60f7b567527 (diff)
downloadkrb5-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.c22
-rw-r--r--src/windows/identity/plugins/krb4/krb4newcreds.c11
-rw-r--r--src/windows/identity/plugins/krb5/krb5configcc.c11
-rw-r--r--src/windows/identity/plugins/krb5/krb5configid.c10
-rw-r--r--src/windows/identity/plugins/krb5/krb5configids.c14
-rw-r--r--src/windows/identity/plugins/krb5/krb5newcreds.c24
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);