diff options
author | DreamNik <dreamnik@mail.ru> | 2013-09-29 14:45:58 +0400 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2013-11-04 11:42:04 +0000 |
commit | 7c00ed22d9b5c33f5b33221e906946b11a9bde3b (patch) | |
tree | ec7ac05492af2757f79d588cabf4b0139eccb52d | |
parent | ba7b85711838cf9b9dfa30dde74a636393235c3e (diff) | |
download | dbus-7c00ed22d9b5c33f5b33221e906946b11a9bde3b.tar.gz |
make_and_run_test_nodes: avoid undefined behaviour
In code that looks like n[i] = v(&i), where v increments i, C leaves it
undefined whether the old or new value of i is used to locate n[i].
As it happens, gcc used the pre-increment value of i, but MSVC
used the post-increment value.
Fix this by inserting a sequence point to disambiguate the intended order.
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=69924
Reviewed-by: Chengwei Yang <chengwei.yang@intel.com>
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
[wrote commit message, fixed whitespace -smcv]
Signed-off-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
-rw-r--r-- | dbus/dbus-marshal-recursive-util.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/dbus/dbus-marshal-recursive-util.c b/dbus/dbus-marshal-recursive-util.c index 95124140..a2aaaf93 100644 --- a/dbus/dbus-marshal-recursive-util.c +++ b/dbus/dbus-marshal-recursive-util.c @@ -1785,10 +1785,13 @@ make_and_run_test_nodes (void) start_next_test ("All values in one big toplevel %d iteration\n", 1); { TestTypeNode *nodes[N_VALUES]; + TestTypeNode *node; i = 0; - while ((nodes[i] = value_generator (&i))) - ; + while ((node = value_generator (&i))) + { + nodes[i - 1] = node; + } run_test_nodes (nodes, N_VALUES); |