diff mbox

[v2] qdict: fix unbounded stack warning for qdict_array_entries

Message ID 1458614246-28528-1-git-send-email-peterx@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Peter Xu March 22, 2016, 2:37 a.m. UTC
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>
---
 qobject/qdict.c | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

Comments

Markus Armbruster March 22, 2016, 3:39 p.m. UTC | #1
Peter Xu <peterx@redhat.com> writes:

> 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>

I lack the time to take this through my tree before my Easter vacation.
Nominating for qemu-trivial, assuming Luiz doesn't mind.
Michael Tokarev May 6, 2016, 6:39 p.m. UTC | #2
22.03.2016 18:39, Markus Armbruster wrote:
> Peter Xu <peterx@redhat.com> writes:
> 
>> 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>
> 
> I lack the time to take this through my tree before my Easter vacation.
> Nominating for qemu-trivial, assuming Luiz doesn't mind.

(Finally) applied to -trivial, thanks!

/mjt
diff mbox

Patch

diff --git a/qobject/qdict.c b/qobject/qdict.c
index 9833bd0..fe6ffa1 100644
--- a/qobject/qdict.c
+++ b/qobject/qdict.c
@@ -704,19 +704,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;
         }