]> source.dussan.org Git - tigervnc.git/commitdiff
Correctly handle ZRLE cursors
authorPierre Ossman <ossman@cendio.se>
Fri, 30 Aug 2024 14:15:09 +0000 (16:15 +0200)
committerPierre Ossman <ossman@cendio.se>
Fri, 30 Aug 2024 14:15:09 +0000 (16:15 +0200)
Cursor data has a depth of 32 bits and hence cannot use CPIXELs.

This is a regression from baca73d.

common/rfb/ZRLEDecoder.cxx

index 474fd6ca147e49f6e97565d9d9df047dee6844ac..e274a697ac48574afbc8189f7b298b1c5ba1f38c 100644 (file)
@@ -125,10 +125,10 @@ void ZRLEDecoder::zrleDecode(const Rect& r, rdr::InStream* is,
   Pixel maxPixel = pf.pixelFromRGB((uint16_t)-1, (uint16_t)-1, (uint16_t)-1);
   bool fitsInLS3Bytes = maxPixel < (1<<24);
   bool fitsInMS3Bytes = (maxPixel & 0xff) == 0;
-  bool isLowCPixel = (sizeof(T) == 4) &&
+  bool isLowCPixel = (sizeof(T) == 4) && (pf.depth <= 24) &&
                      ((fitsInLS3Bytes && pf.isLittleEndian()) ||
                       (fitsInMS3Bytes && pf.isBigEndian()));
-  bool isHighCPixel = (sizeof(T) == 4) &&
+  bool isHighCPixel = (sizeof(T) == 4) && (pf.depth <= 24) &&
                       ((fitsInLS3Bytes && pf.isBigEndian()) ||
                        (fitsInMS3Bytes && pf.isLittleEndian()));