Просмотр исходного кода

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

Steven Dake 20 лет назад
Родитель
Сommit
a6496d9b9b
1 измененных файлов с 11 добавлено и 1 удалено
  1. 11 1
      lib/clm.c

+ 11 - 1
lib/clm.c

@@ -133,7 +133,11 @@ saClmInitialize (
 		goto error_put_destroy;
 		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);
 	pthread_mutex_init (&clmInstance->response_mutex, NULL);
 
 
@@ -281,6 +285,9 @@ saClmDispatch (
 		switch (dispatch_data.header.id) {
 		switch (dispatch_data.header.id) {
 
 
 		case MESSAGE_RES_CLM_TRACKCALLBACK:
 		case MESSAGE_RES_CLM_TRACKCALLBACK:
+			if (callbacks.saClmClusterTrackCallback == NULL) {
+				continue;
+			}
 			res_clm_trackcallback = (struct res_clm_trackcallback *)&dispatch_data;
 			res_clm_trackcallback = (struct res_clm_trackcallback *)&dispatch_data;
 			error = SA_AIS_OK;
 			error = SA_AIS_OK;
 
 
@@ -316,6 +323,9 @@ saClmDispatch (
 			break;
 			break;
 
 
 		case MESSAGE_RES_CLM_NODEGETCALLBACK:
 		case MESSAGE_RES_CLM_NODEGETCALLBACK:
+			if (callbacks.saClmClusterNodeGetCallback == NULL) {
+				continue;
+			}
 			res_clm_nodegetcallback = (struct res_clm_nodegetcallback *)&dispatch_data;
 			res_clm_nodegetcallback = (struct res_clm_nodegetcallback *)&dispatch_data;
 
 
 			callbacks.saClmClusterNodeGetCallback (
 			callbacks.saClmClusterNodeGetCallback (