[Freeipa-devel] [PATCH] COLLECTION Adding flat traversal & copy

Sumit Bose sbose at redhat.com
Fri Jul 10 10:31:16 UTC 2009


On Thu, Jul 09, 2009 at 06:34:58PM -0400, Dmitri Pal wrote:
>     COLLECTION Adding flat traversal & copy
>    
>     The collection is hierarchical. The flattening
>     of the collection was not implemented before
>     both for traversal and copying. This patch
>     introduces functionality to traverse or
>     iterate through collection as flat set
>     and also copy collection into another flattening
>     it and automatically resolving conflicts.
>     Also improved traceability and fixed memory leak
>     in unbind iterator code.
> 
> Sorry it grew a bit due to me adding extensive unit tests for different
> cases (and fixing things as I uncovered them).
> 1) Checked for tabs
> 2) Ran UT in valgrind
> 3) Checked for warnings in special build using Simo's scripts
>  
> 
Hi Dmitri,

the patch applies and compiles well.

There are a couple of '--' on unsigned values in this patch. I have not
checked if this is always save. Maybe it makes sense to add some
decrement macro which checks for 0 before doing -- ?

While tracking some signed/unsigned comparisons (-Wextra will show them)
I have found an issue in col_insert_item_into_current. If
collection == NULL and collection->type != COL_TYPE_COLLECTION,
collection will be NULL the first time it is accessed. The attached
patch will solve this.

Concerning signed/unsigned comparisons. What do you think about setting
the idx/index arguements of:
- col_insert_item_into_current
- col_extract_item_from_current
- col_extract_item
- col_insert_item

and the level of col_iterate_up to unsigned to make it clear the
unsigned values are expected?

bye,
Sumit
-------------- next part --------------
>From 7d39704baab85118c16ebad22641a38e086440e9 Mon Sep 17 00:00:00 2001
From: Sumit Bose <sbose at redhat.com>
Date: Fri, 10 Jul 2009 12:14:32 +0200
Subject: [PATCH] fix for a potential segfault

---
 common/collection/collection.c |   27 ++++++++++++---------------
 1 files changed, 12 insertions(+), 15 deletions(-)

diff --git a/common/collection/collection.c b/common/collection/collection.c
index b4a2c8d..a2ba328 100644
--- a/common/collection/collection.c
+++ b/common/collection/collection.c
@@ -346,24 +346,21 @@ int col_insert_item_into_current(struct collection_item *collection,
         return EINVAL;
     }
 
+    /* We can add items only to collections */
+    if (collection->type != COL_TYPE_COLLECTION) {
+        TRACE_ERROR_STRING("Attempt to add item to non collection.","");
+        TRACE_ERROR_STRING("Collection name:", collection->property);
+        TRACE_ERROR_NUMBER("Collection type:", collection->type);
+        return EINVAL;
+    }
+
     if (collection == NULL) {
         TRACE_INFO_STRING("col_insert_item_into_current",
                           "Collection accepting is NULL");
-        if (item->type == COL_TYPE_COLLECTION) {
-            /* This is a special case of self creation */
-            TRACE_INFO_STRING("col_insert_item_into_current",
-                              "Adding header item to new collection.");
-            collection = item;
-        }
-    }
-    else {
-        /* We can add items only to collections */
-        if (collection->type != COL_TYPE_COLLECTION) {
-            TRACE_ERROR_STRING("Attempt to add item to non collection.","");
-            TRACE_ERROR_STRING("Collection name:", collection->property);
-            TRACE_ERROR_NUMBER("Collection type:", collection->type);
-            return EINVAL;
-        }
+        /* This is a special case of self creation */
+        TRACE_INFO_STRING("col_insert_item_into_current",
+                          "Adding header item to new collection.");
+        collection = item;
     }
 
     /* After processing flags we can process disposition */
-- 
1.6.2.5



More information about the Freeipa-devel mailing list