mirror of
https://github.com/X11Libre/xserver.git
synced 2026-03-24 01:34:11 +00:00
Xext: namespace: fix NULL derefence on client close
Removing the namespace assignment of killed clients in ClientState-hook is too early - we still need it later. Using the new ClientDestroyCallback instead. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
@@ -33,13 +33,23 @@ void hookClientState(CallbackListPtr *pcbl, void *unused, void *calldata)
|
||||
break;
|
||||
|
||||
case ClientStateRetained:
|
||||
XnamespaceAssignClient(subj, NULL);
|
||||
break;
|
||||
case ClientStateGone:
|
||||
XnamespaceAssignClient(subj, NULL);
|
||||
break;
|
||||
default:
|
||||
XNS_HOOK_LOG("unknown state =%d\n", client->clientState);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void hookClientDestroy(CallbackListPtr *pcbl, void *unused, void *calldata)
|
||||
{
|
||||
ClientPtr client = calldata;
|
||||
struct XnamespaceClientPriv *subj = XnsClientPriv(client);
|
||||
|
||||
if (!subj)
|
||||
return; /* no XNS devprivate assigned ? */
|
||||
|
||||
XnamespaceAssignClient(subj, NULL);
|
||||
/* the devprivate is embedded, so no free() necessary */
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
|
||||
void hookClient(CallbackListPtr *pcbl, void *unused, void *calldata);
|
||||
void hookClientState(CallbackListPtr *pcbl, void *unused, void *calldata);
|
||||
void hookClientDestroy(CallbackListPtr *pcbl, void *unused, void *calldata);
|
||||
void hookDevice(CallbackListPtr *pcbl, void *unused, void *calldata);
|
||||
void hookExtAccess(CallbackListPtr *pcbl, void *unused, void *calldata);
|
||||
void hookExtDispatch(CallbackListPtr *pcbl, void *unused, void *calldata);
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include <stdio.h>
|
||||
#include <X11/Xmd.h>
|
||||
|
||||
#include "dix/client_priv.h"
|
||||
#include "dix/dix_priv.h"
|
||||
#include "dix/property_priv.h"
|
||||
#include "dix/selection_priv.h"
|
||||
@@ -34,6 +35,7 @@ NamespaceExtensionInit(void)
|
||||
AddCallback(&PostInitRootWindowCallback, hookInitRootWindow, NULL) &&
|
||||
AddCallback(&PropertyFilterCallback, hookWindowProperty, NULL) &&
|
||||
AddCallback(&SelectionFilterCallback, hookSelectionFilter, NULL) &&
|
||||
AddCallback(&ClientDestroyCallback, hookClientDestroy, NULL) &&
|
||||
XaceRegisterCallback(XACE_CLIENT_ACCESS, hookClient, NULL) &&
|
||||
XaceRegisterCallback(XACE_DEVICE_ACCESS, hookDevice, NULL) &&
|
||||
XaceRegisterCallback(XACE_EXT_DISPATCH, hookExtDispatch, NULL) &&
|
||||
|
||||
Reference in New Issue
Block a user