From a6496d9b9b1e85d099b502cc8fb4fc24ffcf0439 Mon Sep 17 00:00:00 2001 From: Steven Dake Date: Fri, 17 Jun 2005 18:49:33 +0000 Subject: [PATCH] defect 639 fix segfault if null callback parameter passed to saClmInitialize (Logical change 1.220) git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@696 fd59a12c-fef9-0310-b244-a6a79926bd2f --- lib/clm.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/clm.c b/lib/clm.c index 6f371bf1..c9d7b215 100644 --- a/lib/clm.c +++ b/lib/clm.c @@ -133,7 +133,11 @@ saClmInitialize ( goto error_put_destroy; } - memcpy (&clmInstance->callbacks, clmCallbacks, sizeof (SaClmCallbacksT)); + if (clmCallbacks) { + memcpy (&clmInstance->callbacks, clmCallbacks, sizeof (SaClmCallbacksT)); + } else { + memset (&clmInstance->callbacks, 0, sizeof (SaClmCallbacksT)); + } pthread_mutex_init (&clmInstance->response_mutex, NULL); @@ -281,6 +285,9 @@ saClmDispatch ( switch (dispatch_data.header.id) { case MESSAGE_RES_CLM_TRACKCALLBACK: + if (callbacks.saClmClusterTrackCallback == NULL) { + continue; + } res_clm_trackcallback = (struct res_clm_trackcallback *)&dispatch_data; error = SA_AIS_OK; @@ -316,6 +323,9 @@ saClmDispatch ( break; case MESSAGE_RES_CLM_NODEGETCALLBACK: + if (callbacks.saClmClusterNodeGetCallback == NULL) { + continue; + } res_clm_nodegetcallback = (struct res_clm_nodegetcallback *)&dispatch_data; callbacks.saClmClusterNodeGetCallback (