From: Wilfried Goesgens Date: Sat, 26 May 2012 12:12:52 +0000 (+0200) Subject: CtdlUnregisterRoomHook(): fix possible nullpointer deref X-Git-Tag: v8.12~57 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=499294c2ab9935bc1fa1ce1e8bdcee66b50ddc65 CtdlUnregisterRoomHook(): fix possible nullpointer deref --- diff --git a/citadel/serv_extensions.c b/citadel/serv_extensions.c index 32cf53970..fe15aa785 100644 --- a/citadel/serv_extensions.c +++ b/citadel/serv_extensions.c @@ -757,18 +757,25 @@ void CtdlRegisterRoomHook(int (*fcn_ptr)(struct ctdlroom *)) void CtdlUnregisterRoomHook(int (*fcn_ptr)(struct ctdlroom *)) { - RoomFunctionHook *cur, *p; + RoomFunctionHook *cur, *p, *last; - for (cur = RoomHookTable; cur != NULL; cur = cur->next) { - while (cur != NULL && fcn_ptr == cur->fcn_ptr) { + for (last = NULL, cur = RoomHookTable; + cur != NULL; + cur = cur->next) + { + if (fcn_ptr == cur->fcn_ptr) { MODM_syslog(LOG_DEBUG, "Unregistered room function\n"); p = cur->next; - if (cur == RoomHookTable) { - RoomHookTable = p; - } + free(cur); - cur = p; + cur = NULL; + + if (last != NULL) + last->next = p; + else + RoomHookTable = p; } + last = cur; } }