[Spice-devel] [PATCH spice-common] quic: Prevent side effects calling C macros

Frediano Ziglio fziglio at redhat.com
Fri Sep 7 15:28:13 UTC 2018


In some architectures GLib macros to change endianness use the
argument multiple times causing possible side effects.

This happens for instance using Debian SID and MIPS.

This fixes https://gitlab.freedesktop.org/spice/spice-common/issues/1.

Reported-by: Laurent Bigonville <bigon at debian.org>
Tested-by: Laurent Bigonville <bigon at debian.org>
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
 common/quic.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/common/quic.c b/common/quic.c
index 60818c2..c28974e 100644
--- a/common/quic.c
+++ b/common/quic.c
@@ -452,7 +452,8 @@ static inline void read_io_word(Encoder *encoder)
     if (spice_extra_checks) {
         spice_assert(encoder->io_now < encoder->io_end);
     }
-    encoder->io_next_word = GUINT32_FROM_LE(*(encoder->io_now++));
+    encoder->io_next_word = GUINT32_FROM_LE(*(encoder->io_now));
+    encoder->io_now++;
 }
 
 static inline void decode_eatbits(Encoder *encoder, int len)
@@ -585,7 +586,8 @@ static int decode_state_run(Encoder *encoder, CommonState *state)
 
 static inline void init_decode_io(Encoder *encoder)
 {
-    encoder->io_next_word = encoder->io_word = GUINT32_FROM_LE(*(encoder->io_now++));
+    encoder->io_next_word = encoder->io_word = GUINT32_FROM_LE(*(encoder->io_now));
+    encoder->io_now++;
     encoder->io_available_bits = 0;
 }
 
-- 
2.17.1



More information about the Spice-devel mailing list