[X2Go-Commits] [x2gokdriveclient] 01/01: use zlib library to decompress compressed strings instead of built in QT function.

git-admin at x2go.org git-admin at x2go.org
Thu Jan 21 19:59:45 CET 2021


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch master
in repository x2gokdriveclient.

commit 9bc85850eab23eca6510c9de3e6baf9fdf2d0bba
Author: Oleksandr Shneyder <o.shneyder at phoca-gmbh.de>
Date:   Thu Jan 21 12:59:27 2021 -0600

    use zlib library to decompress compressed strings instead of built in QT function.
---
 client.cpp           | 38 +++++++++++++++++++++++++++++++-------
 client.h             |  1 +
 debian/changelog     |  1 +
 debian/control       |  1 +
 x2gokdriveclient.pro |  2 ++
 xcbclip.cpp          |  7 +------
 6 files changed, 37 insertions(+), 13 deletions(-)

diff --git a/client.cpp b/client.cpp
index 370b104..7deb0bb 100644
--- a/client.cpp
+++ b/client.cpp
@@ -57,6 +57,7 @@
 #include <xcbclip.h>
 #endif
 
+#include <zlib.h>
 
 X2GoCursor::X2GoCursor(uint16_t width, uint16_t height, uint16_t xhot, uint16_t yhot, uint32_t serialNumber, uint32_t dataSize)
 {
@@ -869,6 +870,34 @@ void Client::getSelectionBuffer()
 }
 
 
+QByteArray Client::zuncompress(const char* data, uint compressed_size, uint size)
+{
+    unsigned char* out=new unsigned char [size];
+
+    z_stream stream;
+    stream.zalloc = Z_NULL;
+    stream.zfree = Z_NULL;
+    stream.opaque = Z_NULL;
+
+    stream.avail_in = compressed_size;
+    stream.next_in = (unsigned char*)data;
+    stream.avail_out = size;
+    stream.next_out = out;
+
+    inflateInit(&stream);
+    inflate(&stream, Z_NO_FLUSH);
+    inflateEnd(&stream);
+
+    if(!stream.total_out || stream.total_out != size)
+    {
+        qDebug()<<"zlib decompression error, "<<"output size: "<<stream.total_out<<", expected: "<<size;
+    }
+    QByteArray ba( (const char*)out, size);
+    delete[] out;
+    return ba;
+}
+
+
 #ifndef Q_OS_LINUX
 void Client::setInputSelectionData(SelectionType, SelectionMime mime, bool firstChunk, bool lastChunk, uint32_t compressed, uint size, char* data, bool notify)
 {
@@ -888,14 +917,9 @@ void Client::setInputSelectionData(SelectionType, SelectionMime mime, bool first
         selData.append(data,size);
     else
     {
-        QByteArray ba;
-        ba.append((char*) &size, 4);
-        ba.append(data, compressed);
-
         total_compressed+=compressed;
-
-        selData.append(qUncompress(ba));
-        //         qDebug()<<"uncompress from "<<compressed<<" to "<<size;
+        inputSelection[selection].selData.append(Client::zuncompress(data, compressed, size));
+//         qDebug()<<"uncompress from "<<compressed<<" to "<<size;
     }
 
     if(lastChunk )
diff --git a/client.h b/client.h
index a947653..f830905 100644
--- a/client.h
+++ b/client.h
@@ -170,6 +170,7 @@ public:
     void requestSelectionFromServer(SelectionType sel);
     void send_selnotify_to_server(SelectionType selection, SelectionMime mime);
     int max_chunk();
+    static QByteArray zuncompress(const char* data, uint compressed_size, uint size);
 
 public slots:
     void sendOutputSelChunk();
diff --git a/debian/changelog b/debian/changelog
index 05d71ff..c8362cf 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -27,5 +27,6 @@ x2gokdriveclient (0.0.0.1-0x2go1) UNRELEASED; urgency=medium
     - give server some time for initialization before sending version.
     - support sending and recieving selections on demand. Support reading and writing INCR properties.
     - include xcb/xproto.h header
+    - use zlib library to decompress compressed strings instead of built in QT function.
 
  -- Mike Gabriel <mike.gabriel at das-netzwerkteam.de>  Tue, 04 Jun 2019 11:10:43 +0200
diff --git a/debian/control b/debian/control
index 80c4090..5a7ef64 100644
--- a/debian/control
+++ b/debian/control
@@ -14,6 +14,7 @@ Build-Depends:
  libqt5x11extras5-dev,
  libxcb1-dev,
  libxcb-xfixes0-dev,
+ zlib1g-dev
 Standards-Version: 4.3.0
 Homepage: https://code.x2go.org/releases/source/x2gokdriveclient
 Vcs-Git: git://code.x2go.org/x2gokdriveclient.git
diff --git a/x2gokdriveclient.pro b/x2gokdriveclient.pro
index 32f89a5..e106f41 100644
--- a/x2gokdriveclient.pro
+++ b/x2gokdriveclient.pro
@@ -27,3 +27,5 @@ linux {
 SOURCES += xcbclip.cpp
 HEADERS += xcbclip.h
 }
+
+LIBS += -lz
diff --git a/xcbclip.cpp b/xcbclip.cpp
index 34cf6c2..c5a9c51 100644
--- a/xcbclip.cpp
+++ b/xcbclip.cpp
@@ -805,13 +805,8 @@ void XCBClip::setInputSelectionData(SelectionType selection, SelectionMime mime,
         inputSelection[selection].selData.append(data,size);
     else
     {
-        QByteArray ba;
-        ba.append((char*) &size, 4);
-        ba.append(data, compressed);
-
         total_compressed+=compressed;
-
-        inputSelection[selection].selData.append(qUncompress(ba));
+        inputSelection[selection].selData.append(Client::zuncompress(data, compressed, size));
 //         qDebug()<<"uncompress from "<<compressed<<" to "<<size;
     }
 

--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2gokdriveclient.git


More information about the x2go-commits mailing list