]> git.ipfire.org Git - pakfire.git/commitdiff
config: Fix reference counting
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 14 Jun 2021 10:37:21 +0000 (10:37 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 14 Jun 2021 10:37:21 +0000 (10:37 +0000)
The reference counter wasn't correctly initialized which cause that the
configuration struct was freed too soon but still accessed.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/config.c
src/libpakfire/pakfire.c

index a231b4894bdea87d98bb6aa95e3dc543008fb475..92091971ccb864234b0c834c428b1250bc9033c3 100644 (file)
@@ -54,6 +54,9 @@ int pakfire_config_create(struct pakfire_config** config) {
        if (!c)
                return ENOMEM;
 
+       // Initialize reference counter
+       c->nrefs = 1;
+
        // Initialise entries
        STAILQ_INIT(&c->entries);
 
@@ -77,7 +80,7 @@ static void pakfire_config_free(struct pakfire_config* config) {
 }
 
 struct pakfire_config* pakfire_config_ref(struct pakfire_config* config) {
-       config->nrefs++;
+       ++config->nrefs;
 
        return config;
 }
index 17750879ac3e2d987c8b6b6f57a2433985389ef1..561084363cb110d57ac8348c36a8a164cad60b10 100644 (file)
@@ -973,10 +973,10 @@ int pakfire_has_flag(Pakfire pakfire, int flag) {
 }
 
 struct pakfire_config* pakfire_get_config(Pakfire pakfire) {
-       if (pakfire->config)
-               return pakfire_config_ref(pakfire->config);
+       if (!pakfire->config)
+               return NULL;
 
-       return NULL;
+       return pakfire_config_ref(pakfire->config);
 }
 
 PAKFIRE_EXPORT const char* pakfire_get_path(Pakfire pakfire) {