Hello community,

here is the log from the commit of package vncmanager for openSUSE:Leap:15.2 
checked in at 2020-05-26 18:33:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2/vncmanager (Old)
 and      /work/SRC/openSUSE:Leap:15.2/.vncmanager.new.2738 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "vncmanager"

Tue May 26 18:33:07 2020 rev:17 rq:809038 version:1.0.2

Changes:
--------
--- /work/SRC/openSUSE:Leap:15.2/vncmanager/vncmanager.changes  2020-01-15 
16:28:21.232751097 +0100
+++ /work/SRC/openSUSE:Leap:15.2/.vncmanager.new.2738/vncmanager.changes        
2020-05-26 18:33:11.769682711 +0200
@@ -1,0 +2,15 @@
+Thu May 14 15:28:21 UTC 2020 - Petr Tesařík <ptesa...@suse.com>
+
+- u_Fix-TightCompressionControl-definition-for-big-endian.patch
+  * Fix tight compression decoder on big-endian systems
+    (bsc#1171344).
+
+-------------------------------------------------------------------
+Wed May 13 03:52:02 UTC 2020 - Petr Tesařík <ptesa...@suse.com>
+
+- u_Fix_tight_decoder_on_888_encodings.patch
+  * Fix tight decoder with 888 pixel encodings. (bsc#1169732)
+- u_Fix-PixelFormat-ntoh-and-PixelFormat-hton.patch
+  * Fix PixelFormat::ntoh() and PixelFormat::hton(). (bsc#1169732)
+
+-------------------------------------------------------------------

New:
----
  u_Fix-PixelFormat-ntoh-and-PixelFormat-hton.patch
  u_Fix-TightCompressionControl-definition-for-big-endian.patch
  u_Fix_tight_decoder_on_888_encodings.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ vncmanager.spec ++++++
--- /var/tmp/diff_new_pack.Lefi3x/_old  2020-05-26 18:33:12.197683647 +0200
+++ /var/tmp/diff_new_pack.Lefi3x/_new  2020-05-26 18:33:12.201683655 +0200
@@ -53,6 +53,9 @@
 Patch4:         n_disable_mit_shm.patch
 Patch5:         U_ControllerConnection-Split-iostream-into-istream-and.patch
 Patch6:         n_vncmanager-add-target-to-service.patch
+Patch7:         u_Fix_tight_decoder_on_888_encodings.patch
+Patch8:         u_Fix-PixelFormat-ntoh-and-PixelFormat-hton.patch
+Patch9:         u_Fix-TightCompressionControl-definition-for-big-endian.patch
 
 %description
 Session manager for VNC. It listens on VNC port and spawns Xvnc processes for 
incoming clients.
@@ -78,6 +81,9 @@
 %patch4 -p1
 %patch5 -p1
 %patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
 
 %build
 %cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_VERBOSE_MAKEFILE=ON

++++++ u_Fix-PixelFormat-ntoh-and-PixelFormat-hton.patch ++++++
From: Petr Tesarik <ptesa...@suse.com>
Date: Tue, 12 May 2020 08:55:28 +0200
Subject: Fix PixelFormat::ntoh() and PixelFormat::hton()
References: bsc#1169732
Upstream: merged
Git-commit: 4626045b79011be2c0df8f8aa0e541ca9649f4ce

The bigEndianFlag corresponds to the X server pixel byte
order (defined as IMAGE_BYTE_ORDER in X.org sources). If it does
not match client byte order, every pixel value must be
byte-swapped.

It's wrong to skip byte conversion of the red/gren/blue max values
in struct PixelFormat itself when this flag is false. RFC6143 is
very clear on this matter and explicitly states:

> Note the -max values are always in big endian order.

Signed-off-by: Petr Tesarik <ptesa...@suse.com>
---
 rfb.h | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/rfb.h b/rfb.h
index 949bed0..4c2e658 100644
--- a/rfb.h
+++ b/rfb.h
@@ -114,15 +114,15 @@ struct PixelFormat {
     uint8_t _padding[3] = { 0, 0, 0 };
 
     void ntoh() {
-        if (bigEndianFlag) {
-            redMax = ntohs(redMax);
-            greenMax = ntohs(greenMax);
-            blueMax = ntohs(blueMax);
-        }
+       redMax = ntohs(redMax);
+       greenMax = ntohs(greenMax);
+       blueMax = ntohs(blueMax);
     }
 
     void hton() {
-        bigEndianFlag = (__BYTE_ORDER == __BIG_ENDIAN);
+       redMax = htons(redMax);
+       greenMax = htons(greenMax);
+       blueMax = htons(blueMax);
     }
 
     bool operator==(const PixelFormat &another) const {
-- 
2.16.4

++++++ u_Fix-TightCompressionControl-definition-for-big-endian.patch ++++++
From: Petr Tesarik <ptesa...@suse.com>
Date: Thu, 14 May 2020 17:23:21 +0200
Subject: Fix TightCompressionControl definition for big-endian
References: bsc#1171344
Upstream: merged
Git-commit: b487e58a4f8d0b879d34cb9be18a292c753daf3e

Bitfields are allocated from the most significant bit down to the
least significant bit on big-endian systems, so the declaration
order must be reversed to match on-wire format.

Signed-off-by: Petr Tesarik <ptesa...@suse.com>
---
 rfb.h |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

--- a/rfb.h
+++ b/rfb.h
@@ -523,13 +523,21 @@ struct VeNCryptPlainMessage {
 };
 
 struct TightCompressionControl {
+#if __BYTE_ORDER == __BIG_ENDIAN
+    unsigned rest : 4;
+
+    unsigned resetStream3 : 1;
+    unsigned resetStream2 : 1;
+    unsigned resetStream1 : 1;
+    unsigned resetStream0 : 1;
+#else
     unsigned resetStream0 : 1;
     unsigned resetStream1 : 1;
     unsigned resetStream2 : 1;
     unsigned resetStream3 : 1;
 
     unsigned rest : 4;
-
+#endif // __BYTE_ORDER
     int useStream() const {
         return rest & 0x3;
     }
++++++ u_Fix_tight_decoder_on_888_encodings.patch ++++++
From: Petr Tesarik <ptesa...@suse.com>
Subject: Fix calculation of raw 888 pixel data length in Tight encoding
References: bsc#1169732
Upstream: merged
Git-commit: e3c7982e56183a1f8b1f65cae3ee7b080c48e17d

When raw pixel data is sent and pixels are encoded as three 8-bit
true colour values aligned on byte boundaries, the Tight encoding
always uses three bytes per pixel.

Signed-off-by: Petr Tesarik <ptesa...@suse.com>
---
 VncTunnel.cpp |    4 +++-
 rfb.h         |   13 +++++++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

--- a/VncTunnel.cpp
+++ b/VncTunnel.cpp
@@ -623,7 +623,9 @@ void VncTunnel::processFramebufferUpdate
                     } else {
                         bpp = 8;
                     }
-                }
+                } else if (m_pixelFormat.is888()) {
+                   bpp = 24;
+               }
 
                 std::size_t dataSize = (rectangle.width * bpp + 7) / 8 * 
rectangle.height;
                 if (dataSize < TightMinSizeToCompress) {
--- a/rfb.h
+++ b/rfb.h
@@ -147,6 +147,19 @@ struct PixelFormat {
         // Validating only things that could hurt vncmanager. If there are 
some other wrong values, underlying VNC server should complain.
         return bitsPerPixel == 8 || bitsPerPixel == 16 || bitsPerPixel == 24 
|| bitsPerPixel == 32;
     }
+
+    bool is888() const {
+       return
+           trueColourFlag &&
+           bitsPerPixel == 32 &&
+           depth == 24 &&
+           redMax == 255 &&
+           greenMax == 255 &&
+           blueMax == 255 &&
+           (redShift & 0x07) == 0 &&
+           (greenShift & 0x07) == 0 &&
+           (blueShift & 0x07) == 0;
+    }
 };
 
 struct ServerInitMessage {

Reply via email to