qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/2] block/qapi: trivial fixes
@ 2016-03-09  5:56 Peter Xu
  2016-03-09  5:56 ` [Qemu-devel] [PATCH 1/2] block/qapi: make two printf() formats literal Peter Xu
                   ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: Peter Xu @ 2016-03-09  5:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, qemu-block, armbru, peterx, pbonzini

One is to use literal printf format when possible.

One is to fix an unbounded usage of stack.

Peter Xu (2):
  block/qapi: make two printf() formats literal
  block/qapi: fix unbounded stack for dump_qdict

 block/qapi.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

-- 
2.4.3

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH 1/2] block/qapi: make two printf() formats literal
  2016-03-09  5:56 [Qemu-devel] [PATCH 0/2] block/qapi: trivial fixes Peter Xu
@ 2016-03-09  5:56 ` Peter Xu
  2016-03-09 22:14   ` Eric Blake
  2016-03-22 15:47   ` Markus Armbruster
  2016-03-09  5:56 ` [Qemu-devel] [PATCH 2/2] block/qapi: fix unbounded stack for dump_qdict Peter Xu
  2016-03-22 15:50 ` [Qemu-devel] [PATCH 0/2] block/qapi: trivial fixes Markus Armbruster
  2 siblings, 2 replies; 12+ messages in thread
From: Peter Xu @ 2016-03-09  5:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, qemu-block, armbru, peterx, pbonzini

Fix two places to use literal printf format when possible.

Signed-off-by: Peter Xu <peterx@redhat.com>
---
 block/qapi.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/block/qapi.c b/block/qapi.c
index db2d3fb..c4c2115 100644
--- a/block/qapi.c
+++ b/block/qapi.c
@@ -619,9 +619,8 @@ static void dump_qlist(fprintf_function func_fprintf, void *f, int indentation,
     for (entry = qlist_first(list); entry; entry = qlist_next(entry), i++) {
         QType type = qobject_type(entry->value);
         bool composite = (type == QTYPE_QDICT || type == QTYPE_QLIST);
-        const char *format = composite ? "%*s[%i]:\n" : "%*s[%i]: ";
-
-        func_fprintf(f, format, indentation * 4, "", i);
+        func_fprintf(f, "%*s[%i]:%c", indentation * 4, "", i,
+                     composite ? '\n' : ' ');
         dump_qobject(func_fprintf, f, indentation + 1, entry->value);
         if (!composite) {
             func_fprintf(f, "\n");
@@ -637,7 +636,6 @@ static void dump_qdict(fprintf_function func_fprintf, void *f, int indentation,
     for (entry = qdict_first(dict); entry; entry = qdict_next(dict, entry)) {
         QType type = qobject_type(entry->value);
         bool composite = (type == QTYPE_QDICT || type == QTYPE_QLIST);
-        const char *format = composite ? "%*s%s:\n" : "%*s%s: ";
         char key[strlen(entry->key) + 1];
         int i;
 
@@ -646,8 +644,8 @@ static void dump_qdict(fprintf_function func_fprintf, void *f, int indentation,
             key[i] = entry->key[i] == '-' ? ' ' : entry->key[i];
         }
         key[i] = 0;
-
-        func_fprintf(f, format, indentation * 4, "", key);
+        func_fprintf(f, "%*s%s:%c", indentation * 4, "", key,
+                     composite ? '\n' : ' ');
         dump_qobject(func_fprintf, f, indentation + 1, entry->value);
         if (!composite) {
             func_fprintf(f, "\n");
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH 2/2] block/qapi: fix unbounded stack for dump_qdict
  2016-03-09  5:56 [Qemu-devel] [PATCH 0/2] block/qapi: trivial fixes Peter Xu
  2016-03-09  5:56 ` [Qemu-devel] [PATCH 1/2] block/qapi: make two printf() formats literal Peter Xu
@ 2016-03-09  5:56 ` Peter Xu
  2016-03-09 22:16   ` Eric Blake
  2016-03-22 15:48   ` Markus Armbruster
  2016-03-22 15:50 ` [Qemu-devel] [PATCH 0/2] block/qapi: trivial fixes Markus Armbruster
  2 siblings, 2 replies; 12+ messages in thread
From: Peter Xu @ 2016-03-09  5:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, qemu-block, armbru, peterx, pbonzini

Using heap instead of stack for better safety.

Signed-off-by: Peter Xu <peterx@redhat.com>
---
 block/qapi.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/block/qapi.c b/block/qapi.c
index c4c2115..b798e35 100644
--- a/block/qapi.c
+++ b/block/qapi.c
@@ -636,9 +636,8 @@ static void dump_qdict(fprintf_function func_fprintf, void *f, int indentation,
     for (entry = qdict_first(dict); entry; entry = qdict_next(dict, entry)) {
         QType type = qobject_type(entry->value);
         bool composite = (type == QTYPE_QDICT || type == QTYPE_QLIST);
-        char key[strlen(entry->key) + 1];
+        char *key = g_malloc(strlen(entry->key) + 1);
         int i;
-
         /* replace dashes with spaces in key (variable) names */
         for (i = 0; entry->key[i]; i++) {
             key[i] = entry->key[i] == '-' ? ' ' : entry->key[i];
@@ -650,6 +649,7 @@ static void dump_qdict(fprintf_function func_fprintf, void *f, int indentation,
         if (!composite) {
             func_fprintf(f, "\n");
         }
+        g_free(key);
     }
 }
 
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] block/qapi: make two printf() formats literal
  2016-03-09  5:56 ` [Qemu-devel] [PATCH 1/2] block/qapi: make two printf() formats literal Peter Xu
@ 2016-03-09 22:14   ` Eric Blake
  2016-03-10  1:46     ` Peter Xu
  2016-03-22 15:47   ` Markus Armbruster
  1 sibling, 1 reply; 12+ messages in thread
From: Eric Blake @ 2016-03-09 22:14 UTC (permalink / raw)
  To: Peter Xu, qemu-devel; +Cc: kwolf, pbonzini, armbru, qemu-block

[-- Attachment #1: Type: text/plain, Size: 1332 bytes --]

On 03/08/2016 10:56 PM, Peter Xu wrote:
> Fix two places to use literal printf format when possible.
> 
> Signed-off-by: Peter Xu <peterx@redhat.com>
> ---
>  block/qapi.c | 10 ++++------
>  1 file changed, 4 insertions(+), 6 deletions(-)

Reviewed-by: Eric Blake <eblake@redhat.com>

> 
> diff --git a/block/qapi.c b/block/qapi.c
> index db2d3fb..c4c2115 100644
> --- a/block/qapi.c
> +++ b/block/qapi.c
> @@ -619,9 +619,8 @@ static void dump_qlist(fprintf_function func_fprintf, void *f, int indentation,
>      for (entry = qlist_first(list); entry; entry = qlist_next(entry), i++) {
>          QType type = qobject_type(entry->value);
>          bool composite = (type == QTYPE_QDICT || type == QTYPE_QLIST);
> -        const char *format = composite ? "%*s[%i]:\n" : "%*s[%i]: ";
> -
> -        func_fprintf(f, format, indentation * 4, "", i);
> +        func_fprintf(f, "%*s[%i]:%c", indentation * 4, "", i,
> +                     composite ? '\n' : ' ');

[The nerd in me wants to point out that you could avoid the ternary by
writing '"\n "[composite]', but that's too ugly to use outside of IOCCC
submissions, and I wouldn't be surprised if it (rightfully) triggers
clang warnings]

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH 2/2] block/qapi: fix unbounded stack for dump_qdict
  2016-03-09  5:56 ` [Qemu-devel] [PATCH 2/2] block/qapi: fix unbounded stack for dump_qdict Peter Xu
@ 2016-03-09 22:16   ` Eric Blake
  2016-03-22 15:48   ` Markus Armbruster
  1 sibling, 0 replies; 12+ messages in thread
From: Eric Blake @ 2016-03-09 22:16 UTC (permalink / raw)
  To: Peter Xu, qemu-devel; +Cc: kwolf, pbonzini, armbru, qemu-block

[-- Attachment #1: Type: text/plain, Size: 1373 bytes --]

On 03/08/2016 10:56 PM, Peter Xu wrote:
> Using heap instead of stack for better safety.
> 
> Signed-off-by: Peter Xu <peterx@redhat.com>
> ---
>  block/qapi.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)

Reviewed-by: Eric Blake <eblake@redhat.com>

> 
> diff --git a/block/qapi.c b/block/qapi.c
> index c4c2115..b798e35 100644
> --- a/block/qapi.c
> +++ b/block/qapi.c
> @@ -636,9 +636,8 @@ static void dump_qdict(fprintf_function func_fprintf, void *f, int indentation,
>      for (entry = qdict_first(dict); entry; entry = qdict_next(dict, entry)) {
>          QType type = qobject_type(entry->value);
>          bool composite = (type == QTYPE_QDICT || type == QTYPE_QLIST);
> -        char key[strlen(entry->key) + 1];
> +        char *key = g_malloc(strlen(entry->key) + 1);
>          int i;
> -
>          /* replace dashes with spaces in key (variable) names */
>          for (i = 0; entry->key[i]; i++) {
>              key[i] = entry->key[i] == '-' ? ' ' : entry->key[i];
> @@ -650,6 +649,7 @@ static void dump_qdict(fprintf_function func_fprintf, void *f, int indentation,
>          if (!composite) {
>              func_fprintf(f, "\n");
>          }
> +        g_free(key);
>      }
>  }
>  
> 

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] block/qapi: make two printf() formats literal
  2016-03-09 22:14   ` Eric Blake
@ 2016-03-10  1:46     ` Peter Xu
  2016-03-21 21:14       ` Eric Blake
  0 siblings, 1 reply; 12+ messages in thread
From: Peter Xu @ 2016-03-10  1:46 UTC (permalink / raw)
  To: Eric Blake; +Cc: kwolf, pbonzini, qemu-devel, qemu-block, armbru

On Wed, Mar 09, 2016 at 03:14:03PM -0700, Eric Blake wrote:
> > +        func_fprintf(f, "%*s[%i]:%c", indentation * 4, "", i,
> > +                     composite ? '\n' : ' ');
> 
> [The nerd in me wants to point out that you could avoid the ternary by
> writing '"\n "[composite]', but that's too ugly to use outside of IOCCC
> submissions, and I wouldn't be surprised if it (rightfully) triggers
> clang warnings]

Do you mean something like:

int i = 0;
printf("%c", '"\n "[i]');

Is this a grammar btw?

Peter

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] block/qapi: make two printf() formats literal
  2016-03-10  1:46     ` Peter Xu
@ 2016-03-21 21:14       ` Eric Blake
  2016-03-22  2:04         ` Peter Xu
  0 siblings, 1 reply; 12+ messages in thread
From: Eric Blake @ 2016-03-21 21:14 UTC (permalink / raw)
  To: Peter Xu; +Cc: kwolf, pbonzini, qemu-devel, qemu-block, armbru

[-- Attachment #1: Type: text/plain, Size: 1974 bytes --]

On 03/09/2016 06:46 PM, Peter Xu wrote:
> On Wed, Mar 09, 2016 at 03:14:03PM -0700, Eric Blake wrote:
>>> +        func_fprintf(f, "%*s[%i]:%c", indentation * 4, "", i,
>>> +                     composite ? '\n' : ' ');
>>
>> [The nerd in me wants to point out that you could avoid the ternary by
>> writing '"\n "[composite]', but that's too ugly to use outside of IOCCC
>> submissions, and I wouldn't be surprised if it (rightfully) triggers
>> clang warnings]
> 
> Do you mean something like:
> 
> int i = 0;
> printf("%c", '"\n "[i]');

You mean:

printf("%c", "\n "[i]);

(no '').  But with your declaration of 'i' as int, it is only defined if
i <= 2 (whereas in my example above, "\n "[composite] is always defined
because composite is bool rather than int).

> 
> Is this a grammar btw?

Yes, C has an ugly grammar, because [] is just syntactic sugar for
deferencing pointer addition with nicer operator precedence.  Quoting
C99 6.5.2.1:

"The definition of the subscript operator [] is that E1[E2] is identical
to (*((E1)+(E2))).  Because of the conversion rules that apply to the
binary + operator, if E1 is an array object (equivalently, a pointer to
the initial element of an array object) and E2 is an integer, E1[E2]
designates the E2-th element of E1 (counting from zero)."

And a string literal is just a fancy way of writing the address of an
array of characters (where the address is chosen by the compiler).

Thus, it IS valid to dereference the addition of an integer offset with
the address implied by a string literal in order to obtain a character
within the string.  And since the [] operator is commutative (even
though no one in their right mind commutes the operands), you can also
write the even-uglier:

composite["\n "]

But now we've gone far astray from the original patch review :)

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] block/qapi: make two printf() formats literal
  2016-03-21 21:14       ` Eric Blake
@ 2016-03-22  2:04         ` Peter Xu
  0 siblings, 0 replies; 12+ messages in thread
From: Peter Xu @ 2016-03-22  2:04 UTC (permalink / raw)
  To: Eric Blake; +Cc: kwolf, pbonzini, qemu-devel, qemu-block, armbru

On Mon, Mar 21, 2016 at 03:14:48PM -0600, Eric Blake wrote:
> On 03/09/2016 06:46 PM, Peter Xu wrote:
> > 
> > Is this a grammar btw?
> 
> Yes, C has an ugly grammar, because [] is just syntactic sugar for
> deferencing pointer addition with nicer operator precedence.  Quoting
> C99 6.5.2.1:
> 
> "The definition of the subscript operator [] is that E1[E2] is identical
> to (*((E1)+(E2))).  Because of the conversion rules that apply to the
> binary + operator, if E1 is an array object (equivalently, a pointer to
> the initial element of an array object) and E2 is an integer, E1[E2]
> designates the E2-th element of E1 (counting from zero)."
> 
> And a string literal is just a fancy way of writing the address of an
> array of characters (where the address is chosen by the compiler).
> 
> Thus, it IS valid to dereference the addition of an integer offset with
> the address implied by a string literal in order to obtain a character
> within the string.  And since the [] operator is commutative (even
> though no one in their right mind commutes the operands), you can also
> write the even-uglier:
> 
> composite["\n "]
> 
> But now we've gone far astray from the original patch review :)

Interesting thing to know.  Thanks. :)

-- peterx

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] block/qapi: make two printf() formats literal
  2016-03-09  5:56 ` [Qemu-devel] [PATCH 1/2] block/qapi: make two printf() formats literal Peter Xu
  2016-03-09 22:14   ` Eric Blake
@ 2016-03-22 15:47   ` Markus Armbruster
  1 sibling, 0 replies; 12+ messages in thread
From: Markus Armbruster @ 2016-03-22 15:47 UTC (permalink / raw)
  To: Peter Xu; +Cc: kwolf, pbonzini, qemu-devel, qemu-block

Peter Xu <peterx@redhat.com> writes:

> Fix two places to use literal printf format when possible.
>
> Signed-off-by: Peter Xu <peterx@redhat.com>

Reviewed-by: Markus Armbruster <armbru@redhat.com>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH 2/2] block/qapi: fix unbounded stack for dump_qdict
  2016-03-09  5:56 ` [Qemu-devel] [PATCH 2/2] block/qapi: fix unbounded stack for dump_qdict Peter Xu
  2016-03-09 22:16   ` Eric Blake
@ 2016-03-22 15:48   ` Markus Armbruster
  1 sibling, 0 replies; 12+ messages in thread
From: Markus Armbruster @ 2016-03-22 15:48 UTC (permalink / raw)
  To: Peter Xu; +Cc: kwolf, pbonzini, qemu-devel, qemu-block

Peter Xu <peterx@redhat.com> writes:

> Using heap instead of stack for better safety.
>
> Signed-off-by: Peter Xu <peterx@redhat.com>
> ---
>  block/qapi.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/block/qapi.c b/block/qapi.c
> index c4c2115..b798e35 100644
> --- a/block/qapi.c
> +++ b/block/qapi.c
> @@ -636,9 +636,8 @@ static void dump_qdict(fprintf_function func_fprintf, void *f, int indentation,
>      for (entry = qdict_first(dict); entry; entry = qdict_next(dict, entry)) {
>          QType type = qobject_type(entry->value);
>          bool composite = (type == QTYPE_QDICT || type == QTYPE_QLIST);
> -        char key[strlen(entry->key) + 1];
> +        char *key = g_malloc(strlen(entry->key) + 1);
>          int i;
> -

Unwanted whitespace change.

>          /* replace dashes with spaces in key (variable) names */
>          for (i = 0; entry->key[i]; i++) {
>              key[i] = entry->key[i] == '-' ? ' ' : entry->key[i];
> @@ -650,6 +649,7 @@ static void dump_qdict(fprintf_function func_fprintf, void *f, int indentation,
>          if (!composite) {
>              func_fprintf(f, "\n");
>          }
> +        g_free(key);
>      }
>  }

With the unwanted whitespace change backed out:
Reviewed-by: Markus Armbruster <armbru@redhat.com>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH 0/2] block/qapi: trivial fixes
  2016-03-09  5:56 [Qemu-devel] [PATCH 0/2] block/qapi: trivial fixes Peter Xu
  2016-03-09  5:56 ` [Qemu-devel] [PATCH 1/2] block/qapi: make two printf() formats literal Peter Xu
  2016-03-09  5:56 ` [Qemu-devel] [PATCH 2/2] block/qapi: fix unbounded stack for dump_qdict Peter Xu
@ 2016-03-22 15:50 ` Markus Armbruster
  2016-03-22 16:27   ` Kevin Wolf
  2 siblings, 1 reply; 12+ messages in thread
From: Markus Armbruster @ 2016-03-22 15:50 UTC (permalink / raw)
  To: Peter Xu; +Cc: kwolf, pbonzini, qemu-devel, qemu-block

Peter Xu <peterx@redhat.com> writes:

> One is to use literal printf format when possible.
>
> One is to fix an unbounded usage of stack.

I lack the time to take this through my tree before my Easter vacation.
Kevin, can you stick it into your next pull request for me?  Note
trivial fixup on PATCH 2.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH 0/2] block/qapi: trivial fixes
  2016-03-22 15:50 ` [Qemu-devel] [PATCH 0/2] block/qapi: trivial fixes Markus Armbruster
@ 2016-03-22 16:27   ` Kevin Wolf
  0 siblings, 0 replies; 12+ messages in thread
From: Kevin Wolf @ 2016-03-22 16:27 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: pbonzini, qemu-block, qemu-devel, Peter Xu

Am 22.03.2016 um 16:50 hat Markus Armbruster geschrieben:
> Peter Xu <peterx@redhat.com> writes:
> 
> > One is to use literal printf format when possible.
> >
> > One is to fix an unbounded usage of stack.
> 
> I lack the time to take this through my tree before my Easter vacation.
> Kevin, can you stick it into your next pull request for me?  Note
> trivial fixup on PATCH 2.

Thanks, applied to the block branch.

Kevin

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2016-03-22 16:27 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-09  5:56 [Qemu-devel] [PATCH 0/2] block/qapi: trivial fixes Peter Xu
2016-03-09  5:56 ` [Qemu-devel] [PATCH 1/2] block/qapi: make two printf() formats literal Peter Xu
2016-03-09 22:14   ` Eric Blake
2016-03-10  1:46     ` Peter Xu
2016-03-21 21:14       ` Eric Blake
2016-03-22  2:04         ` Peter Xu
2016-03-22 15:47   ` Markus Armbruster
2016-03-09  5:56 ` [Qemu-devel] [PATCH 2/2] block/qapi: fix unbounded stack for dump_qdict Peter Xu
2016-03-09 22:16   ` Eric Blake
2016-03-22 15:48   ` Markus Armbruster
2016-03-22 15:50 ` [Qemu-devel] [PATCH 0/2] block/qapi: trivial fixes Markus Armbruster
2016-03-22 16:27   ` Kevin Wolf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).