]> source.dussan.org Git - tigervnc.git/commitdiff
hextileDecode.h: Fix buffer overflow 378/head
authorJosef Gajdusek <atx@atx.name>
Fri, 4 Nov 2016 11:24:08 +0000 (12:24 +0100)
committerJosef Gajdusek <atx@atx.name>
Fri, 4 Nov 2016 18:21:31 +0000 (19:21 +0100)
The hextileDecodexx functions do not properly check for out-of-bounds writes,
which allows a malicious server to overwrite parts of the stack.

common/rfb/hextileDecode.h

index 47006a042828469a3581fd7ed74b42439446c032..402cd031b654f9c0d0772a9a0b4daacc41359e19 100644 (file)
@@ -22,6 +22,7 @@
 // BPP                - 8, 16 or 32
 
 #include <rdr/InStream.h>
+#include <rfb/Exception.h>
 #include <rfb/hextileConstants.h>
 
 namespace rfb {
@@ -87,6 +88,9 @@ static void HEXTILE_DECODE (const Rect& r, rdr::InStream* is,
           int y = (xy & 15);
           int w = ((wh >> 4) & 15) + 1;
           int h = (wh & 15) + 1;
+          if (x + w > 16 || y + h > 16) {
+            throw rfb::Exception("HEXTILE_DECODE: Hextile out of bounds");
+          }
           PIXEL_T* ptr = buf + y * t.width() + x;
           int rowAdd = t.width() - w;
           while (h-- > 0) {