Petr Machata <[email protected]> писал в своём письме Mon, 20 Apr 2015 11:08:12 +0300:

Роман Донченко <[email protected]> writes:
diff --git a/prototype.c b/prototype.c
index fa52ff3..22e54c4 100644
--- a/prototype.c
+++ b/prototype.c
@@ -547,8 +547,11 @@ protolib_cache_maybe_load(struct protolib_cache *cache,
                          const char *key, int own_key, bool allow_private,
                          struct protolib **retp)
 {
-       if (DICT_FIND_VAL(&cache->protolibs, &key, retp) == 0)
+       if (DICT_FIND_VAL(&cache->protolibs, &key, retp) == 0) {
+               if (*retp != NULL && own_key)
+                       free((void *) key);
                return 0;
+       }

        if (strdup_if(&key, key, !own_key) < 0) {
                fprintf(stderr, "Couldn't cache %s: %s\n",

This looks like the wrong fix.  The one who allocated the key should
free it if protolib_cache_maybe_load returns a failure.

But it returns a success here.

In fact, I think we should take ownership of the key whenever the function returns zero, no matter what's in *retp. What do you think?

_______________________________________________
Ltrace-devel mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/ltrace-devel

Reply via email to