Commit de4905f4 authored by Peter Xu's avatar Peter Xu Committed by Michael Tokarev
Browse files

qdict: fix unbounded stack warning for qdict_array_entries



Here we use one g_strdup_printf() to replace the two stack allocated
array, considering it's more convenient, safe, and as long as it's
called rarely only when quorum device opens. This will remove the
unbound stack warning when compiling with "-Wstack-usage=1000000".

Reviewed-by: default avatarEric Blake <eblake@redhat.com>
Signed-off-by: default avatarPeter Xu <peterx@redhat.com>
Reviewed-by: default avatarMarkus Armbruster <armbru@redhat.com>
Signed-off-by: default avatarMichael Tokarev <mjt@tls.msk.ru>
parent 1d817db3
Loading
Loading
Loading
Loading
+6 −9
Original line number Diff line number Diff line
@@ -705,19 +705,16 @@ int qdict_array_entries(QDict *src, const char *subqdict)
    for (i = 0; i < INT_MAX; i++) {
        QObject *subqobj;
        int subqdict_entries;
        size_t slen = 32 + subqdict_len;
        char indexstr[slen], prefix[slen];
        size_t snprintf_ret;
        char *prefix = g_strdup_printf("%s%u.", subqdict, i);

        snprintf_ret = snprintf(indexstr, slen, "%s%u", subqdict, i);
        assert(snprintf_ret < slen);
        subqdict_entries = qdict_count_prefixed_entries(src, prefix);

        subqobj = qdict_get(src, indexstr);
        /* Remove ending "." */
        prefix[strlen(prefix) - 1] = 0;
        subqobj = qdict_get(src, prefix);

        snprintf_ret = snprintf(prefix, slen, "%s%u.", subqdict, i);
        assert(snprintf_ret < slen);
        g_free(prefix);

        subqdict_entries = qdict_count_prefixed_entries(src, prefix);
        if (subqdict_entries < 0) {
            return subqdict_entries;
        }