From 82f9d834ad772b2f16b6524f679d14d8a7afe881 Mon Sep 17 00:00:00 2001
From: Gabriele Contini <gcontini@users.noreply.github.com>
Date: 周二, 10 9月 2019 23:29:10 +0800
Subject: [PATCH] fix issue #37 tests in windows

---
 src/library/pc-identifiers.c |   19 ++++++++++++-------
 1 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/library/pc-identifiers.c b/src/library/pc-identifiers.c
index 10c51b2..59f3dd1 100644
--- a/src/library/pc-identifiers.c
+++ b/src/library/pc-identifiers.c
@@ -39,11 +39,11 @@
 
 	if (identifiers == NULL || *num_identifiers == 0) {
 		result_adapterInfos = getAdapterInfos(NULL, &adapter_num);
-		if (result_adapterInfos != FUNC_RET_OK) {
+		if ((result_adapterInfos != FUNC_RET_OK) || (adapter_num == 0)) {
 			return generate_disk_pc_id(identifiers, num_identifiers, false);
 		}
 		result_diskinfos = getDiskInfos(NULL, &disk_num);
-		if (result_diskinfos != FUNC_RET_OK) {
+		if ((result_diskinfos != FUNC_RET_OK) || (disk_num == 0)) {
 			return generate_ethernet_pc_id(identifiers, num_identifiers, true);
 		}
 		*num_identifiers = disk_num * adapter_num;
@@ -153,7 +153,7 @@
 		return result_diskinfos;
 	}
 	diskInfos = (DiskInfo*) malloc(disk_num * sizeof(DiskInfo));
-	//memset(diskInfos,0,disk_num * sizeof(DiskInfo));
+	memset(diskInfos,0,disk_num * sizeof(DiskInfo));
 	result_diskinfos = getDiskInfos(diskInfos, &disk_num);
 	if (result_diskinfos != FUNC_RET_OK) {
 		free(diskInfos);
@@ -179,7 +179,7 @@
 		if (use_label) {
 			if (diskInfos[i].label[0] != 0) {
 				memset(identifiers[j], 0, sizeof(PcIdentifier)); //!!!!!!!
-				strncpy(identifiers[j], diskInfos[i].label,
+				strncpy((char*)identifiers[j], diskInfos[i].label,
 						sizeof(PcIdentifier));
 				j++;
 			}
@@ -281,14 +281,15 @@
 		PcSignature pc_identifier_out) {
 	//TODO base62 encoding, now uses base64
 	PcIdentifier concat_identifiers[2];
-	char* b64_data;
+	char* b64_data = NULL;
 	int b64_size = 0;
-	size_t concatIdentifiersSize = sizeof(PcIdentifier) * 2;
+	const size_t concatIdentifiersSize = sizeof(PcIdentifier) * 2;
 	//concat_identifiers = (PcIdentifier *) malloc(concatIdentifiersSize);
 	memcpy(&concat_identifiers[0], identifier1, sizeof(PcIdentifier));
 	memcpy(&concat_identifiers[1], identifier2, sizeof(PcIdentifier));
 	b64_data = base64(concat_identifiers, concatIdentifiersSize, &b64_size);
 	if (b64_size > sizeof(PcSignature)) {
+		free(b64_data);
 		return FUNC_RET_BUFFER_TOO_SMALL;
 	}
 	sprintf(pc_identifier_out, "%.4s-%.4s-%.4s-%.4s", &b64_data[0],
@@ -317,6 +318,7 @@
 	req_buffer_size = req_buffer_size < 2 ? 2 : req_buffer_size;
 	identifiers = (PcIdentifier *) malloc(
 			sizeof(PcIdentifier) * req_buffer_size);
+	memset(identifiers, 0, sizeof(PcIdentifier) * req_buffer_size);
 	result = generate_pc_id(identifiers, &req_buffer_size, strategy);
 	if (result != FUNC_RET_OK) {
 		free(identifiers);
@@ -345,7 +347,7 @@
 		PcIdentifier identifier2_out, PcSignature pc_signature_in) {
 	//TODO base62 encoding, now uses base64
 
-	unsigned char * concat_identifiers;
+	unsigned char * concat_identifiers = NULL;
 	char base64ids[17];
 	int identifiers_size;
 
@@ -353,6 +355,7 @@
 			&base64ids[8], &base64ids[12]);
 	concat_identifiers = unbase64(base64ids, 16, &identifiers_size);
 	if (identifiers_size > sizeof(PcIdentifier) * 2) {
+		free(concat_identifiers);
 		return FUNC_RET_BUFFER_TOO_SMALL;
 	}
 	memcpy(identifier1_out, concat_identifiers, sizeof(PcIdentifier));
@@ -386,6 +389,7 @@
 	for (i = 0; i < 2; i++) {
 		current_strategy_id = strategy_from_pc_id(user_identifiers[i]);
 		if (current_strategy_id == STRATEGY_UNKNOWN) {
+			free(calculated_identifiers);
 			return LICENSE_MALFORMED;
 		}
 		if (current_strategy_id != previous_strategy_id) {
@@ -396,6 +400,7 @@
 			generate_pc_id(NULL, &calc_identifiers_size, current_strategy_id);
 			calculated_identifiers = (PcIdentifier *) malloc(
 					sizeof(PcIdentifier) * calc_identifiers_size);
+			memset(calculated_identifiers, 0, sizeof(PcIdentifier) * calc_identifiers_size);
 			generate_pc_id(calculated_identifiers, &calc_identifiers_size,
 					current_strategy_id);
 		}

--
Gitblit v1.9.1