Hello,

several warnings from Clang static analyzer popped up after upgrade to Fedora 19. Attached patches should fix all problems found by clang-analyzer-3.3-0.6.rc3.fc19.x86_64.

--
Petr^2 Spacek
From fe43bd17172c899e86e105e398dfe3a0dd27422d Mon Sep 17 00:00:00 2001
From: Petr Spacek <pspa...@redhat.com>
Date: Mon, 8 Jul 2013 10:27:44 +0200
Subject: [PATCH] Remove false positive NULL dereference reported by Clang
 static analyzer.

The potential problem was reported by clang-analyzer-3.3-0.6.rc3.fc19.x86_64.
http://llvm.org/bugs/show_bug.cgi?id=16541

Signed-off-by: Petr Spacek <pspa...@redhat.com>
---
 src/ldap_helper.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/ldap_helper.c b/src/ldap_helper.c
index c98c9cb955252d1381c514a454e6679b8dc93521..25d86862130ad14a62d716f03a3b3a93118cdf77 100644
--- a/src/ldap_helper.c
+++ b/src/ldap_helper.c
@@ -3513,6 +3513,9 @@ ldap_pool_getconnection(ldap_pool_t *pool, ldap_connection_t ** conn)
 	ldap_conn = *conn;
 
 	CHECK(semaphore_wait_timed(&pool->conn_semaphore));
+	/* Following assertion is necessary to convince clang static analyzer
+	 * that the loop is always entered. */
+	REQUIRE(pool->connections > 0);
 	for (i = 0; i < pool->connections; i++) {
 		ldap_conn = pool->conns[i];
 		if (isc_mutex_trylock(&ldap_conn->lock) == ISC_R_SUCCESS)
-- 
1.8.3.1

From b2918086c7bead609dc2a2d7a494322fe5106bb3 Mon Sep 17 00:00:00 2001
From: Petr Spacek <pspa...@redhat.com>
Date: Mon, 8 Jul 2013 10:40:51 +0200
Subject: [PATCH] Modify ldap_pool_destroy() to handle partially allocated
 ldap_pool_t.

The potential problem was reported by clang-analyzer-3.3-0.6.rc3.fc19.x86_64.

Signed-off-by: Petr Spacek <pspa...@redhat.com>
---
 src/ldap_helper.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/src/ldap_helper.c b/src/ldap_helper.c
index 25d86862130ad14a62d716f03a3b3a93118cdf77..514b81e8da1539e9402cef8a07f8feafeb13ff4d 100644
--- a/src/ldap_helper.c
+++ b/src/ldap_helper.c
@@ -3473,6 +3473,7 @@ cleanup:
 	ldap_pool_destroy(&pool);
 	return result;
 }
+
 static void
 ldap_pool_destroy(ldap_pool_t **poolp)
 {
@@ -3486,14 +3487,16 @@ ldap_pool_destroy(ldap_pool_t **poolp)
 	if (pool == NULL)
 		return;
 
-	for (i = 0; i < pool->connections; i++) {
-		ldap_conn = pool->conns[i];
-		if (ldap_conn != NULL)
-			destroy_ldap_connection(&ldap_conn);
-	}
+	if (pool->conns != NULL) {
+		for (i = 0; i < pool->connections; i++) {
+			ldap_conn = pool->conns[i];
+			if (ldap_conn != NULL)
+				destroy_ldap_connection(&ldap_conn);
+		}
 
-	SAFE_MEM_PUT(pool->mctx, pool->conns,
-		     pool->connections * sizeof(ldap_connection_t *));
+		SAFE_MEM_PUT(pool->mctx, pool->conns,
+			     pool->connections * sizeof(ldap_connection_t *));
+	}
 
 	semaphore_destroy(&pool->conn_semaphore);
 
-- 
1.8.3.1

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to