Hi

This makes sure that calls to object_XYZ_typed() have null terminated key names.

Fabio: can you test this please?

This fixes the errors I was getting from testconfdb.

inline & attached.

Note: there is a testconfdb change I'll rip out (for readability).

-Angus

diff --git a/exec/objdb.c b/exec/objdb.c
index 3334460..d57c009 100644
--- a/exec/objdb.c
+++ b/exec/objdb.c
@@ -659,7 +659,14 @@ static int object_key_create (
        const void *value,
        size_t value_len)
 {
-       return object_key_create_typed (object_handle, key_name,
+       char *key_name_terminated = (char*)key_name;
+       if (key_name_terminated[key_len-1] != '\0') {
+               key_name_terminated = malloc (key_len + 1);
+               memcpy (key_name_terminated, key_name, key_len);
+               key_name_terminated[key_len] = '\0';
+       }
+
+       return object_key_create_typed (object_handle, key_name_terminated,
                                        value, value_len, OBJDB_VALUETYPE_ANY);
 }
 
@@ -973,9 +980,17 @@ static int object_key_get (
        size_t *value_len)
 {
        objdb_value_types_t t;
+       char *key_name_terminated = (char*)key_name;
+
+       if (key_name_terminated[key_len-1] != '\0') {
+               key_name_terminated = malloc (key_len + 1);
+               memcpy (key_name_terminated, key_name, key_len);
+               key_name_terminated[key_len] = '\0';
+       }
+
        return object_key_get_typed(object_handle,
-                                                         key_name,
-                                                         value, value_len, &t);
+               key_name_terminated,
+               value, value_len, &t);
 }
 
 static int object_key_increment (
@@ -1484,9 +1499,10 @@ static int object_key_iter(hdb_handle_t 
parent_object_handle,
        objdb_value_types_t t;
        int ret;
        char *str;
+
        ret = object_key_iter_typed (parent_object_handle, (char**)key_name, 
value, value_len, &t);
        str = *key_name;
-       *key_len = strlen(str);
+       *key_len = strlen(str) + 1;
        return ret;
 }
 
diff --git a/test/testconfdb.c b/test/testconfdb.c
index 3017a69..52888b0 100644
--- a/test/testconfdb.c
+++ b/test/testconfdb.c
@@ -67,6 +67,9 @@ static void print_config_tree(confdb_handle_t handle, 
hdb_handle_t parent_object
        int res;
        int i;
 
+
+       system("corosync-objctl");
+       return;
        /* Show the keys */
        res = confdb_key_iter_start(handle, parent_object_handle);
        if (res != CS_OK) {


Attachment: a.p
Description: Binary data

_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to