diff mbox

[PULL,06/13] qdict: fix unbounded stack warning for qdict_array_entries

Message ID de4905f4bc645ad2991b9b535e8902f81abaf8c7.1463573089.git.mjt@msgid.tls.msk.ru
State New
Headers show

Commit Message

Michael Tokarev May 18, 2016, 12:06 p.m. UTC
From: Peter Xu <peterx@redhat.com>

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:   Eric Blake <eblake@redhat.com>
Signed-off-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
---
 qobject/qdict.c | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)
diff mbox

Patch

diff --git a/qobject/qdict.c b/qobject/qdict.c
index a128536..60f158c 100644
--- a/qobject/qdict.c
+++ b/qobject/qdict.c
@@ -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;
         }