Commit 17e9aa3f authored by Markus Armbruster's avatar Markus Armbruster Committed by Kevin Wolf
Browse files

block-qdict: Pacify Coverity after commit f1b34a24



Commit f1b34a24 replaced less-than-obvious test in
qdict_flatten_qdict() by the obvious one.  Sadly, it made something
else non-obvious: the fact that @new_key passed to qdict_put_obj()
can't be null, because that depends on the function's precondition
(target == qdict) == !prefix.

Tweak the function some more to help Coverity and human readers alike.

Fixes: CID 1393620
Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
parent 609ef9f4
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -97,7 +97,7 @@ static void qdict_flatten_qdict(QDict *qdict, QDict *target, const char *prefix)
    const QDictEntry *entry, *next;
    QDict *dict_val;
    QList *list_val;
    char *new_key;
    char *key, *new_key;

    entry = qdict_first(qdict);

@@ -106,10 +106,12 @@ static void qdict_flatten_qdict(QDict *qdict, QDict *target, const char *prefix)
        value = qdict_entry_value(entry);
        dict_val = qobject_to(QDict, value);
        list_val = qobject_to(QList, value);
        new_key = NULL;

        if (prefix) {
            new_key = g_strdup_printf("%s.%s", prefix, entry->key);
            key = new_key = g_strdup_printf("%s.%s", prefix, entry->key);
        } else {
            key = entry->key;
            new_key = NULL;
        }

        /*
@@ -125,19 +127,17 @@ static void qdict_flatten_qdict(QDict *qdict, QDict *target, const char *prefix)
         * well advised not to modify them altogether.)
         */
        if (dict_val && qdict_size(dict_val)) {
            qdict_flatten_qdict(dict_val, target,
                                new_key ? new_key : entry->key);
            qdict_flatten_qdict(dict_val, target, key);
            if (target == qdict) {
                qdict_del(qdict, entry->key);
            }
        } else if (list_val && !qlist_empty(list_val)) {
            qdict_flatten_qlist(list_val, target,
                                new_key ? new_key : entry->key);
            qdict_flatten_qlist(list_val, target, key);
            if (target == qdict) {
                qdict_del(qdict, entry->key);
            }
        } else if (target != qdict) {
            qdict_put_obj(target, new_key, qobject_ref(value));
            qdict_put_obj(target, key, qobject_ref(value));
        }

        g_free(new_key);