]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
vnc-enc-tight: fix off-by-one bug
authorHerongguang (Stephen) <herongguang.he@huawei.com>
Tue, 12 Jul 2016 09:31:23 +0000 (17:31 +0800)
committerMichael Roth <mdroth@linux.vnet.ibm.com>
Wed, 28 Sep 2016 15:48:17 +0000 (10:48 -0500)
In tight_encode_indexed_rect32, buf(or src)’s size is count. In for loop,
the logic is supposed to be that i is an index into src, i should be
incremented when incrementing src.

This is broken when src is incremented but i is not before while loop,
resulting in off-by-one bug in while loop.

Signed-off-by: He Rongguang <herongguang.he@huawei.com>
Message-id: 5784B8EB.7010008@huawei.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
(cherry picked from commit 3f7e51bca3ef2d64c53b35ab9916c99e4a9e3c69)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
ui/vnc-enc-tight.c

index e5cba0e5a738144d48bf691de48350dfa8331d78..678c5dfbaaacdd6eac88dca6dc5f832f194f399b 100644 (file)
@@ -461,9 +461,10 @@ static int tight_fill_palette(VncState *vs, int x, int y,
                                                                         \
         src = (uint##bpp##_t *) buf;                                    \
                                                                         \
-        for (i = 0; i < count; i++) {                                   \
+        for (i = 0; i < count; ) {                                      \
                                                                         \
             rgb = *src++;                                               \
+            i++;                                                        \
             rep = 0;                                                    \
             while (i < count && *src == rgb) {                          \
                 rep++, src++, i++;                                      \