]> git.ipfire.org Git - pakfire.git/commitdiff
callbacks: Only copy when data is set
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 9 Dec 2021 12:00:02 +0000 (12:00 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 9 Dec 2021 12:00:02 +0000 (12:00 +0000)
When callbacks was a struct but some pointers where NULL it could happen
that we attempt to call that NULL pointer.

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

index e58a100b5248a01b913043edf37ce19abf0e7a16..e6a1821844be849fba6e5a2ba0d1223cb9f621bb 100644 (file)
@@ -872,14 +872,23 @@ PAKFIRE_EXPORT int pakfire_create(struct pakfire** pakfire, const char* path,
 
        // Copy callbacks
        if (callbacks) {
-               memcpy(&p->callbacks, callbacks, sizeof(p->callbacks));
+               if (callbacks->data)
+                       p->callbacks.data = callbacks->data;
 
-       // Set default callbacks
-       } else {
-               // Log to syslog by default
-               p->callbacks.log = pakfire_log_syslog;
+               if (callbacks->log)
+                       p->callbacks.log = callbacks->log;
+
+               if (callbacks->status)
+                       p->callbacks.status = callbacks->status;
+
+               if (callbacks->progress)
+                       p->callbacks.progress = callbacks->progress;
        }
 
+       // Log to syslog by default
+       if (!p->callbacks.log)
+               p->callbacks.log = pakfire_log_syslog;
+
        // Set architecture
        pakfire_string_set(p->arch, arch);