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

Fixes problem where if attributes list is zero, library would segfault

git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@1362 fd59a12c-fef9-0310-b244-a6a79926bd2f
Steven Dake 19 лет назад
Родитель
Сommit
e3795ebdef
1 измененных файлов с 17 добавлено и 15 удалено
  1. 17 15
      lib/amf.c

+ 17 - 15
lib/amf.c

@@ -305,46 +305,48 @@ saAmfDispatch (
 
 		case MESSAGE_RES_AMF_CSISETCALLBACK:
 		    {
-			res_lib_amf_csisetcallback = (struct res_lib_amf_csisetcallback *)&dispatch_data;
+			SaAmfCSIDescriptorT csi_descriptor;
+			SaAmfCSIAttributeT *csi_attribute_array;
+			char *attr_buf;
+			int i;
 
+			res_lib_amf_csisetcallback = (struct res_lib_amf_csisetcallback *)&dispatch_data;
 
 
-			SaAmfCSIDescriptorT csi_descriptor;
-
 			csi_descriptor.csiFlags = res_lib_amf_csisetcallback->csiFlags;
 			memcpy(&csi_descriptor.csiName, &res_lib_amf_csisetcallback->csiName, 
 			       sizeof(SaNameT));
 			csi_descriptor.csiStateDescriptor = res_lib_amf_csisetcallback->csiStateDescriptor;
 			csi_descriptor.csiAttr.number = res_lib_amf_csisetcallback->number;
 
-			SaAmfCSIAttributeT* csi_attribute_array = malloc( sizeof( SaAmfCSIAttributeT ) * 
-									  csi_descriptor.csiAttr.number );
+			csi_attribute_array = malloc (sizeof (SaAmfCSIAttributeT) * 
+									  csi_descriptor.csiAttr.number);
 
-			if( csi_attribute_array == 0) {
+			if (csi_attribute_array == 0) {
 			    return SA_AIS_ERR_LIBRARY;
 			}
 			csi_descriptor.csiAttr.attr = csi_attribute_array;
 
-			char* p = res_lib_amf_csisetcallback->csi_attr_buf;
-			int i;
+			attr_buf = res_lib_amf_csisetcallback->csi_attr_buf;
 			
-			for (i=0; i<csi_descriptor.csiAttr.number; i++) {
-			    csi_attribute_array[i].attrName = (SaUint8T*)p;
+			for (i = 0; i < csi_descriptor.csiAttr.number; i++) {
+				csi_attribute_array[i].attrName = (SaUint8T*)attr_buf;
 
-			    p += strlen(p) + 1;
-			    csi_attribute_array[i].attrValue = (SaUint8T*)p;
+				attr_buf += strlen(attr_buf) + 1;
+				csi_attribute_array[i].attrValue = (SaUint8T*)attr_buf;
 
-			    p += strlen(p) + 1;
+				attr_buf += strlen(attr_buf) + 1;
 			}
 			
-
 			callbacks.saAmfCSISetCallback (
 				res_lib_amf_csisetcallback->invocation,
 				&res_lib_amf_csisetcallback->compName,
 				res_lib_amf_csisetcallback->haState,
 				&csi_descriptor);
 
-			free(csi_attribute_array);
+			if (csi_attribute_array != NULL) {
+				free(csi_attribute_array);
+			}
 			break;
 		    }
 		case MESSAGE_RES_AMF_CSIREMOVECALLBACK: