From 4150ba45f73e3ae0ba3ee6a4006acedf7709c8e7 Mon Sep 17 00:00:00 2001
From: open-license-manager <rillf@maildrop.cc>
Date: 周二, 29 7月 2014 07:52:19 +0800
Subject: [PATCH] valgrind

---
 test/functional/generate-license.cpp    |    2 +-
 src/library/os/linux/os-linux.c         |   19 +++++++++++++------
 src/license-generator/LicenseSigner.cpp |    9 ++++++---
 test/functional/volid_test.cpp          |    7 +++----
 4 files changed, 23 insertions(+), 14 deletions(-)

diff --git a/src/library/os/linux/os-linux.c b/src/library/os/linux/os-linux.c
index cfb5bf4..3746ddf 100644
--- a/src/library/os/linux/os-linux.c
+++ b/src/library/os/linux/os-linux.c
@@ -10,7 +10,7 @@
 #include <linux/if_link.h>
 #include <sys/socket.h>
 #include <netpacket/packet.h>
-
+#include <valgrind/memcheck.h>
 #include <paths.h>
 
 #include <stdlib.h>
@@ -156,6 +156,7 @@
 		f_return = BUFFER_TOO_SMALL;
 	}
 	freeifaddrs(ifaddr);
+	free(ifnames);
 	return f_return;
 }
 /**
@@ -169,11 +170,12 @@
 	size_t len;
 	unsigned int i, j;
 	char * hexuuid;
-	char cur_character;
+	unsigned char cur_character;
 	//remove characters not in hex set
 	len = strlen(uuid);
 	hexuuid = (char *) malloc(sizeof(char) * strlen(uuid));
 	memset(buffer_out, 0, out_size);
+	memset(hexuuid, 0, sizeof(char) * strlen(uuid));
 
 	for (i = 0, j = 0; i < len; i++) {
 		if (isxdigit(uuid[i])) {
@@ -188,7 +190,7 @@
 		hexuuid[j++] = '0';
 	}
 	hexuuid[j] = '\0';
-	for (i = 0; i < j; i++) {
+	for (i = 0; i < j/2; i++) {
 		sscanf(&hexuuid[i * 2], "%2hhx", &cur_character);
 		buffer_out[i % out_size] = buffer_out[i % out_size] ^ cur_character;
 	}
@@ -220,8 +222,9 @@
 		maxDrives = MAX_UNITS;
 		tmpDrives = (DiskInfo *) malloc(sizeof(DiskInfo) * maxDrives);
 	}
-	statDrives = (__ino64_t *) malloc(maxDrives * sizeof(__ino64_t ));
 	memset(tmpDrives, 0, sizeof(DiskInfo) * maxDrives);
+	statDrives = (__ino64_t *) malloc(maxDrives * sizeof(__ino64_t ));
+	memset(statDrives, 0, sizeof(__ino64_t ) * maxDrives);;
 
 	aFile = setmntent("/proc/mounts", "r");
 	if (aFile == NULL) {
@@ -234,6 +237,7 @@
 #ifdef _DEBUG
 		printf("Open /dev/disk/by-uuid fail");
 #endif
+		free(statDrives);
 		return ERROR;
 	}
 
@@ -288,8 +292,10 @@
 						parseUUID(dir->d_name, tmpDrives[i].disk_sn,
 								sizeof(tmpDrives[i].disk_sn));
 #ifdef _DEBUG
-						printf("uuid %d %s %s %02x%02x%02x%02x\n", i,
-								tmpDrives[i].device, path,
+						VALGRIND_CHECK_VALUE_IS_DEFINED(tmpDrives[i].device);
+
+						printf("uuid %d %s %02x%02x%02x%02x\n", i,
+								tmpDrives[i].device,
 								tmpDrives[i].disk_sn[0],
 								tmpDrives[i].disk_sn[1],
 								tmpDrives[i].disk_sn[2],
@@ -337,6 +343,7 @@
 	 }
 	 }
 	 */
+	free(statDrives);
 	return result;
 }
 
diff --git a/src/license-generator/LicenseSigner.cpp b/src/license-generator/LicenseSigner.cpp
index 908cd46..53fd2f5 100644
--- a/src/license-generator/LicenseSigner.cpp
+++ b/src/license-generator/LicenseSigner.cpp
@@ -59,7 +59,8 @@
 	if (!mdctx) {
 		throw logic_error("Message digest creation context");
 	}
-	const char *private_key = PRIVATE_KEY;
+	const char *private_key = PRIVATE_KEY
+	;
 	BIO* bio = BIO_new_mem_buf((void*) (private_key), strlen(private_key));
 	EVP_PKEY *pktmp = PEM_read_bio_PrivateKey(bio, NULL, NULL, NULL);
 	BIO_free(bio);
@@ -97,8 +98,8 @@
 	 */
 	//bio = BIO_new_fp(stdout, BIO_NOCLOSE);
 	/*int encodedSize = 4 * ceil(slen / 3);
-	char* buffer = (char*) (malloc(encodedSize + 1));
-	memset(buffer,0,encodedSize+1);*/
+	 char* buffer = (char*) (malloc(encodedSize + 1));
+	 memset(buffer,0,encodedSize+1);*/
 	string signatureStr = Opensslb64Encode(slen, signature);
 	/*
 	 * BIO *bio, *b64;
@@ -124,6 +125,8 @@
 	 */
 	/* Clean up */
 	//free(buffer);
+	if (pktmp)
+		EVP_PKEY_free(pktmp);
 	if (signature)
 		OPENSSL_free(signature);
 
diff --git a/test/functional/generate-license.cpp b/test/functional/generate-license.cpp
index 8ece3cf..1a6594e 100644
--- a/test/functional/generate-license.cpp
+++ b/test/functional/generate-license.cpp
@@ -28,7 +28,7 @@
 	argv[i++] = fname.c_str();
 	argv[i++] = "TEST";
 	int retCode = LicenseGenerator::generateLicense(argc, argv);
-	delete (argv);
+	delete[] (argv);
 	BOOST_CHECK_EQUAL(retCode, 0);
 	BOOST_ASSERT(fs::exists(fname));
 	CSimpleIniA ini;
diff --git a/test/functional/volid_test.cpp b/test/functional/volid_test.cpp
index de17e53..996fbb6 100644
--- a/test/functional/volid_test.cpp
+++ b/test/functional/volid_test.cpp
@@ -67,15 +67,14 @@
 	std::ifstream is(idfileLocation);
 	std::istream_iterator<string> start(is), end;
 	std::vector<string> reference_signatures(start, end);
-	BOOST_CHECK_EQUAL(reference_signatures.size(), num_strategies);
+	BOOST_ASSERT(reference_signatures.size() == num_strategies);
 	PcSignature generated_identifier;
 	BOOST_CHECKPOINT("Generating current signatures and comparing with past");
 	for (int i = 0; i < num_strategies; i++) {
 		FUNCTION_RETURN generate_ok = generate_user_pc_signature(
 				generated_identifier, strategies[i]);
 		BOOST_ASSERT(generate_ok == FUNCTION_RETURN::OK);
-		if (memcmp(generated_identifier, reference_signatures[i].c_str(),
-				sizeof(PcSignature))) {
+		if (reference_signatures[i] != generated_identifier) {
 			string message = string("pc signature compare fail: strategy:")
 					+ to_string(strategies[i]) + " generated: ["
 					+ generated_identifier + "] reference: ["
@@ -88,7 +87,7 @@
 	for (int j = 0; j < 100; j++) {
 		for (unsigned int i = 0; i < reference_signatures.size(); i++) {
 			PcSignature pcsig;
-			memcpy(pcsig, reference_signatures[i].c_str(), sizeof(PcSignature));
+			strncpy(pcsig, reference_signatures[i].c_str(), sizeof(PcSignature));
 			EVENT_TYPE val_result = validate_pc_signature(pcsig);
 			string message = string("pc signature verification strategy:")
 					+ to_string(i) + " generated: [" + generated_identifier

--
Gitblit v1.9.1