protect all exported functions by checking the input parameters for NULL input
authorRichard Hughes <richard@hughsie.com>
Sun, 29 Jun 2008 16:32:19 +0000 (17:32 +0100)
committerRichard Hughes <richard@hughsie.com>
Sun, 29 Jun 2008 16:32:19 +0000 (17:32 +0100)
librazor/iterator.c
librazor/razor.c
librazor/root.c
librazor/rpm.c
librazor/transaction.c

index 1169630..5a870cc 100644 (file)
@@ -20,6 +20,8 @@
 #define _GNU_SOURCE
 
 #include <string.h>
+#include <assert.h>
+
 #include "razor-internal.h"
 #include "razor.h"
 
@@ -48,6 +50,8 @@ razor_package_iterator_create(struct razor_set *set)
 {
        struct razor_package_iterator *pi;
 
+       assert (set != NULL);
+
        pi = zalloc(sizeof *pi);
        pi->set = set;
        pi->end = set->packages.data + set->packages.size;
@@ -61,6 +65,10 @@ razor_package_iterator_init_for_property(struct razor_package_iterator *pi,
                                         struct razor_set *set,
                                         struct razor_property *property)
 {
+       assert (pi != NULL);
+       assert (set != NULL);
+       assert (property != NULL);
+
        memset(pi, 0, sizeof *pi);
        pi->set = set;
        pi->index = list_first(&property->packages, &set->package_pool);
@@ -72,6 +80,9 @@ razor_package_iterator_create_for_property(struct razor_set *set,
 {
        struct list *index;
 
+       assert (set != NULL);
+       assert (property != NULL);
+
        index = list_first(&property->packages, &set->package_pool);
        return razor_package_iterator_create_with_index(set, index);
 }
@@ -83,6 +94,9 @@ razor_package_iterator_create_for_file(struct razor_set *set,
        struct razor_entry *entry;
        struct list *index;
 
+       assert (set != NULL);
+       assert (filename != NULL);
+
        entry = razor_set_find_entry(set, set->files.data, filename);
        if (entry == NULL)
                return razor_package_iterator_create_empty(set);
@@ -102,6 +116,8 @@ razor_package_iterator_next(struct razor_package_iterator *pi,
        int valid;
        struct razor_package *p, *packages;
 
+       assert (pi != NULL);
+
        if (pi->package) {
                p = pi->package++;
                valid = p < pi->end;
@@ -129,6 +145,8 @@ razor_package_iterator_next(struct razor_package_iterator *pi,
 RAZOR_EXPORT void
 razor_package_iterator_destroy(struct razor_package_iterator *pi)
 {
+       assert (pi != NULL);
+
        if (pi->free_index)
                free(pi->index);
 
@@ -141,6 +159,9 @@ razor_property_iterator_create(struct razor_set *set,
 {
        struct razor_property_iterator *pi;
 
+       assert (set != NULL);
+       assert (package != NULL);
+
        pi = zalloc(sizeof *pi);
        pi->set = set;
 
@@ -166,6 +187,8 @@ razor_property_iterator_next(struct razor_property_iterator *pi,
        int valid;
        struct razor_property *p, *properties;
 
+       assert (pi != NULL);
+
        if (pi->property) {
                p = pi->property++;
                valid = p < pi->end;
@@ -208,6 +231,8 @@ razor_package_query_create(struct razor_set *set)
        struct razor_package_query *pq;
        int count;
 
+       assert (set != NULL);
+
        pq = zalloc(sizeof *pq);
        pq->set = set;
        count = set->packages.size / sizeof(struct razor_package);
@@ -222,6 +247,9 @@ razor_package_query_add_package(struct razor_package_query *pq,
 {
        struct razor_package *packages;
 
+       assert (pq != NULL);
+       assert (p != NULL);
+
        packages = pq->set->packages.data;
        pq->count += pq->vector[p - packages] ^ 1;
        pq->vector[p - packages] = 1;
@@ -234,6 +262,9 @@ razor_package_query_add_iterator(struct razor_package_query *pq,
        struct razor_package *packages, *p;
        const char *name, *version, *arch;
 
+       assert (pq != NULL);
+       assert (pi != NULL);
+
        packages = pq->set->packages.data;
        while (razor_package_iterator_next(pi, &p, &name, &version, &arch)) {
                pq->count += pq->vector[p - packages] ^ 1;
@@ -249,6 +280,8 @@ razor_package_query_finish(struct razor_package_query *pq)
        struct list *index;
        int i, j;
 
+       assert (pq != NULL);
+
        set = pq->set;
        if (pq->count > 0)
                index = zalloc(pq->count * sizeof *index);
index 78a1182..88ff7a7 100644 (file)
@@ -32,6 +32,7 @@
 #include <errno.h>
 #include <ctype.h>
 #include <fnmatch.h>
+#include <assert.h>
 
 #include "razor-internal.h"
 #include "razor.h"
@@ -127,6 +128,9 @@ razor_set_open_details(struct razor_set *set, const char *filename)
        struct array *array;
        int fd;
 
+       assert (set != NULL);
+       assert (filename != NULL);
+
        fd = open(filename, O_RDONLY);
        if (fstat(fd, &stat) < 0)
                return -1;
@@ -157,6 +161,9 @@ razor_set_open_files(struct razor_set *set, const char *filename)
        struct array *array;
        int fd;
 
+       assert (set != NULL);
+       assert (filename != NULL);
+
        fd = open(filename, O_RDONLY);
        if (fstat(fd, &stat) < 0)
                return -1;
@@ -186,6 +193,8 @@ razor_set_destroy(struct razor_set *set)
        struct array *a;
        int i;
 
+       assert (set != NULL);
+
        if (set->header) {
                for (i = 0; set->header->sections[i].type; i++)
                        ;
@@ -340,6 +349,9 @@ razor_versioncmp(const char *s1, const char *s2)
        long n1, n2;
        int res;
 
+       assert (s1 != NULL);
+       assert (s2 != NULL);
+
        n1 = strtol(s1, (char **) &p1, 10);
        n2 = strtol(s2, (char **) &p2, 10);
 
@@ -377,6 +389,9 @@ razor_set_get_package(struct razor_set *set, const char *package)
        struct razor_package *p;
        const char *name, *version, *arch;
 
+       assert (set != NULL);
+       assert (package != NULL);
+
        pi = razor_package_iterator_create(set);
        while (razor_package_iterator_next(pi, &p, &name, &version, &arch)) {
                if (strcmp(package, name) == 0)
@@ -395,6 +410,9 @@ razor_package_get_details(struct razor_set *set,
 {
        const char *pool = set->details_string_pool.data;
 
+       assert (set != NULL);
+       assert (package != NULL);
+
        if (summary != NULL)
                *summary = &pool[package->summary];
        if (description != NULL)
@@ -408,6 +426,8 @@ razor_package_get_details(struct razor_set *set,
 RAZOR_EXPORT const char *
 razor_property_relation_to_string(struct razor_property *p)
 {
+       assert (p != NULL);
+
        switch (p->flags & RAZOR_PROPERTY_RELATION_MASK) {
        case RAZOR_PROPERTY_LESS:
                return "<";
@@ -432,6 +452,8 @@ razor_property_relation_to_string(struct razor_property *p)
 RAZOR_EXPORT const char *
 razor_property_type_to_string(struct razor_property *p)
 {
+       assert (p != NULL);
+
        switch (p->flags & RAZOR_PROPERTY_TYPE_MASK) {
        case RAZOR_PROPERTY_REQUIRES:
                return "requires";
@@ -454,6 +476,10 @@ razor_set_find_entry(struct razor_set *set,
        const char *n, *pool = set->file_string_pool.data;
        int len;
 
+       assert (set != NULL);
+       assert (dir != NULL);
+       assert (pattern != NULL);
+
        e = (struct razor_entry *) set->files.data + dir->start;
        do {
                n = pool + e->name;
@@ -498,6 +524,8 @@ razor_set_list_files(struct razor_set *set, const char *pattern)
        struct razor_entry *e;
        char buffer[512], *p, *base;
 
+       assert (set != NULL);
+
        if (pattern == NULL || !strcmp (pattern, "/")) {
                buffer[0] = '\0';
                list_dir(set, set->files.data, buffer, NULL);
@@ -585,6 +613,9 @@ razor_set_list_package_files(struct razor_set *set, const char *name)
        uint32_t end;
        char buffer[512];
 
+       assert (set != NULL);
+       assert (name != NULL);
+
        package = razor_set_get_package(set, name);
        /* TODO: we should return the error to the caller */
        if (!package)
@@ -610,6 +641,9 @@ razor_set_diff(struct razor_set *set, struct razor_set *upstream,
        const char *name1, *name2, *version1, *version2, *arch1, *arch2;
        int res;
 
+       assert (set != NULL);
+       assert (upstream != NULL);
+
        pi1 = razor_package_iterator_create(set);
        pi2 = razor_package_iterator_create(upstream);
 
@@ -663,6 +697,9 @@ razor_set_create_remove_iterator(struct razor_set *set,
        struct razor_package_query *query;
        struct razor_package_iterator *pi;
 
+       assert (set != NULL);
+       assert (next != NULL);
+
        query = razor_package_query_create(set);
        razor_set_diff(next, set, add_new_package, query);
 
@@ -683,6 +720,9 @@ razor_set_create_install_iterator(struct razor_set *set,
        struct razor_package_query *query;
        struct razor_package_iterator *pi;
 
+       assert (set != NULL);
+       assert (next != NULL);
+
        query = razor_package_query_create(next);
        razor_set_diff(set, next, add_new_package, query);
 
index cff1994..d574539 100644 (file)
@@ -24,6 +24,8 @@
 #include <dirent.h>
 #include <unistd.h>
 #include <fcntl.h>
+#include <assert.h>
+
 #include "razor.h"
 #include "razor-internal.h"
 
@@ -49,6 +51,8 @@ razor_root_create(const char *root)
        struct razor_set *set;
        char path[PATH_MAX], details_path[PATH_MAX], files_path[PATH_MAX];
 
+       assert (root != NULL);
+
        if (stat(root, &buf) < 0) {
                if (mkdir(root, 0777) < 0) {
                        fprintf(stderr,
@@ -100,6 +104,8 @@ razor_root_open(const char *root)
 {
        struct razor_root *image;
 
+       assert (root != NULL);
+
        image = malloc(sizeof *image);
        if (image == NULL)
                return NULL;
@@ -140,6 +146,8 @@ razor_root_open_read_only(const char *root)
 {
        char path[PATH_MAX];
 
+       assert (root != NULL);
+
        snprintf(path, sizeof path, "%s%s/%s",
                 root, razor_root_path, system_repo_filename);
 
@@ -149,12 +157,16 @@ razor_root_open_read_only(const char *root)
 RAZOR_EXPORT struct razor_set *
 razor_root_get_system_set(struct razor_root *root)
 {
+       assert (root != NULL);
+
        return root->system;
 }
 
 RAZOR_EXPORT int
 razor_root_close(struct razor_root *root)
 {
+       assert (root != NULL);
+
        razor_set_destroy(root->system);
        unlink(root->new_path);
        close(root->fd);
@@ -166,6 +178,9 @@ razor_root_close(struct razor_root *root)
 RAZOR_EXPORT void
 razor_root_update(struct razor_root *root, struct razor_set *next)
 {
+       assert (root != NULL);
+       assert (next != NULL);
+
        razor_set_write_to_fd(next, root->fd, RAZOR_REPO_FILE_MAIN);
        root->next = next;
 
@@ -178,6 +193,8 @@ razor_root_update(struct razor_root *root, struct razor_set *next)
 RAZOR_EXPORT int
 razor_root_commit(struct razor_root *root)
 {
+       assert (root != NULL);
+
        /* Make it so. */
        rename(root->new_path, root->path);
        printf("renamed %s to %s\n", root->new_path, root->path);
index 7eb5b01..9435354 100644 (file)
@@ -31,6 +31,7 @@
 #include <unistd.h>
 #include <arpa/inet.h>
 #include <zlib.h>
+#include <assert.h>
 
 #include "razor.h"
 #include "razor-internal.h"
@@ -357,6 +358,8 @@ razor_rpm_open(const char *filename)
        const char *name;
        int fd;
 
+       assert (filename != NULL);
+
        rpm = malloc(sizeof *rpm);
        if (rpm == NULL)
                return NULL;
@@ -713,6 +716,9 @@ razor_rpm_install(struct razor_rpm *rpm, const char *root)
        char *path;
        size_t filesize;
 
+       assert (rpm != NULL);
+       assert (root != NULL);
+
        installer.rpm = rpm;
        installer.root = root;
 
@@ -771,6 +777,8 @@ razor_rpm_close(struct razor_rpm *rpm)
 {
        int err;
 
+       assert (rpm != NULL);
+
        free(rpm->dirs);
        err = munmap(rpm->map, rpm->size);
        free(rpm);
@@ -786,6 +794,9 @@ razor_importer_add_rpm(struct razor_importer *importer, struct razor_rpm *rpm)
        const uint32_t *epoch;
        char evr[128], buf[16];
 
+       assert (importer != NULL);
+       assert (rpm != NULL);
+
        name = razor_rpm_get_indirect(rpm, RPMTAG_NAME, NULL);
        epoch = razor_rpm_get_indirect(rpm, RPMTAG_EPOCH, NULL);
        version = razor_rpm_get_indirect(rpm, RPMTAG_VERSION, NULL);
index 0e8342d..11ccc74 100644 (file)
@@ -32,6 +32,7 @@
 #include <errno.h>
 #include <ctype.h>
 #include <fnmatch.h>
+#include <assert.h>
 
 #include "razor-internal.h"
 #include "razor.h"
@@ -188,6 +189,9 @@ RAZOR_EXPORT void
 razor_transaction_install_package(struct razor_transaction *trans,
                                  struct razor_package *package)
 {
+       assert (trans != NULL);
+       assert (package != NULL);
+
        transaction_set_install_package(&trans->upstream, package);
        trans->changes++;
 }
@@ -196,6 +200,9 @@ RAZOR_EXPORT void
 razor_transaction_remove_package(struct razor_transaction *trans,
                                 struct razor_package *package)
 {
+       assert (trans != NULL);
+       assert (package != NULL);
+
        transaction_set_remove_package(&trans->system, package);
        trans->changes++;
 }
@@ -206,6 +213,9 @@ razor_transaction_update_package(struct razor_transaction *trans,
 {
        struct razor_package *spkgs, *upkgs, *end;
 
+       assert (trans != NULL);
+       assert (package != NULL);
+
        spkgs = trans->system.set->packages.data;
        upkgs = trans->upstream.set->packages.data;
        end = trans->system.set->packages.data +
@@ -532,6 +542,8 @@ razor_transaction_update_all(struct razor_transaction *trans)
        struct razor_package *p;
        int i, count;
 
+       assert (trans != NULL);
+
        count = trans->system.set->packages.size / sizeof *p;
        for (i = 0; i < count; i++)
                trans->system.packages[i] |= TRANS_PACKAGE_UPDATE;
@@ -868,6 +880,8 @@ razor_transaction_finish(struct razor_transaction *trans)
 RAZOR_EXPORT void
 razor_transaction_destroy(struct razor_transaction *trans)
 {
+       assert (trans != NULL);
+
        transaction_set_release(&trans->system);
        transaction_set_release(&trans->upstream);
        free(trans);