forked from pool/tigervnc
Accepting request 280582 from home:michalsrb:branches:X11:XOrg
- Update to tigervnc 1.4.1 on xorg-server 1.16.1. OBS-URL: https://build.opensuse.org/request/show/280582 OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/tigervnc?expand=0&rev=46
This commit is contained in:
parent
4aa15ef254
commit
b854932e02
@ -1,40 +1,54 @@
|
||||
--- tigervnc-1.3.1.orig/unix/xserver/hw/vnc/buildtime.c
|
||||
+++ tigervnc-1.3.1/unix/xserver/hw/vnc/buildtime.c
|
||||
Index: tigervnc-1.4.1/unix/xserver/hw/vnc/buildtime.c
|
||||
===================================================================
|
||||
--- tigervnc-1.4.1.orig/unix/xserver/hw/vnc/buildtime.c
|
||||
+++ tigervnc-1.4.1/unix/xserver/hw/vnc/buildtime.c
|
||||
@@ -15,4 +15,4 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
* USA.
|
||||
*/
|
||||
-char buildtime[] = __DATE__ " " __TIME__;
|
||||
+char buildtime[] = "??? ?? ???? ??:??:??";
|
||||
--- tigervnc-1.3.1.orig/unix/vncconfig/buildtime.c
|
||||
+++ tigervnc-1.3.1/unix/vncconfig/buildtime.c
|
||||
Index: tigervnc-1.4.1/unix/vncconfig/buildtime.c
|
||||
===================================================================
|
||||
--- tigervnc-1.4.1.orig/unix/vncconfig/buildtime.c
|
||||
+++ tigervnc-1.4.1/unix/vncconfig/buildtime.c
|
||||
@@ -15,4 +15,4 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
* USA.
|
||||
*/
|
||||
-char buildtime[] = __DATE__ " " __TIME__;
|
||||
+char buildtime[] = "??? ?? ???? ??:??:??";
|
||||
--- tigervnc-1.3.1.orig/unix/x0vncserver/buildtime.c
|
||||
+++ tigervnc-1.3.1/unix/x0vncserver/buildtime.c
|
||||
Index: tigervnc-1.4.1/unix/x0vncserver/buildtime.c
|
||||
===================================================================
|
||||
--- tigervnc-1.4.1.orig/unix/x0vncserver/buildtime.c
|
||||
+++ tigervnc-1.4.1/unix/x0vncserver/buildtime.c
|
||||
@@ -15,4 +15,4 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
* USA.
|
||||
*/
|
||||
-char buildtime[] = __DATE__ " " __TIME__;
|
||||
+char buildtime[] = "??? ?? ???? ??:??:??";
|
||||
--- tigervnc-1.3.1.orig/vncviewer/buildTime.cxx
|
||||
+++ tigervnc-1.3.1/vncviewer/buildTime.cxx
|
||||
@@ -15,4 +15,4 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
* USA.
|
||||
*/
|
||||
-const char* buildTime = "Built on " __DATE__ " at " __TIME__;
|
||||
+const char* buildTime = "Built on ??? ?? ???? at ??:??:??";
|
||||
--- tigervnc-1.3.1.orig/win/winvnc/buildTime.cxx
|
||||
+++ tigervnc-1.3.1/win/winvnc/buildTime.cxx
|
||||
Index: tigervnc-1.4.1/win/winvnc/buildTime.cxx
|
||||
===================================================================
|
||||
--- tigervnc-1.4.1.orig/win/winvnc/buildTime.cxx
|
||||
+++ tigervnc-1.4.1/win/winvnc/buildTime.cxx
|
||||
@@ -15,4 +15,4 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
* USA.
|
||||
*/
|
||||
-const char* buildTime = "Built on " __DATE__ " at " __TIME__;
|
||||
+const char* buildTime = "Built on ??? ?? ???? at ??:??:??";
|
||||
Index: tigervnc-1.4.1/CMakeLists.txt
|
||||
===================================================================
|
||||
--- tigervnc-1.4.1.orig/CMakeLists.txt
|
||||
+++ tigervnc-1.4.1/CMakeLists.txt
|
||||
@@ -39,8 +39,7 @@ if(MSVC)
|
||||
message(FATAL_ERROR "TigerVNC cannot be built with Visual Studio. Please use MinGW")
|
||||
endif()
|
||||
|
||||
-set(BUILD_TIMESTAMP "")
|
||||
-execute_process(COMMAND "date" "+%Y-%m-%d %H:%M" OUTPUT_VARIABLE BUILD_TIMESTAMP)
|
||||
+set(BUILD_TIMESTAMP "??-??-?? ??:??")
|
||||
|
||||
if(NOT BUILD_TIMESTAMP)
|
||||
set(BUILD_TIMESTAMP "")
|
||||
|
@ -1,13 +0,0 @@
|
||||
Index: unix/xserver/hw/vnc/vncExtInit.cc
|
||||
===================================================================
|
||||
--- xserver/hw/vnc/vncExtInit.cc (revision 5122)
|
||||
+++ xserver/hw/vnc/vncExtInit.cc (working copy)
|
||||
@@ -1068,7 +1068,7 @@
|
||||
{
|
||||
REQUEST(xVncExtApproveConnectReq);
|
||||
REQUEST_SIZE_MATCH(xVncExtApproveConnectReq);
|
||||
- if (queryConnectId == (void*)stuff->opaqueId) {
|
||||
+ if ((CARD32)(long)queryConnectId == stuff->opaqueId) {
|
||||
for (int scr = 0; scr < screenInfo.numScreens; scr++) {
|
||||
if (desktop[scr]) {
|
||||
desktop[scr]->approveConnection(queryConnectId, stuff->approve,
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a5fca05898394847f2d2876d471622443acb7c648a896978d195e41f010ded51
|
||||
size 1077474
|
3
tigervnc-1.4.1.tar.gz
Normal file
3
tigervnc-1.4.1.tar.gz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5cffd87707fff8e89b9236bc18925729485dd607872833f3a433fea744809ddd
|
||||
size 1369531
|
@ -1,8 +1,8 @@
|
||||
diff --git a/vncviewer/DesktopWindow.cxx b/vncviewer/DesktopWindow.cxx
|
||||
index 40d08ae..7a571ec 100644
|
||||
--- a/vncviewer/DesktopWindow.cxx
|
||||
+++ b/vncviewer/DesktopWindow.cxx
|
||||
@@ -186,6 +186,8 @@ DesktopWindow::~DesktopWindow()
|
||||
Index: tigervnc-1.4.1/vncviewer/DesktopWindow.cxx
|
||||
===================================================================
|
||||
--- tigervnc-1.4.1.orig/vncviewer/DesktopWindow.cxx
|
||||
+++ tigervnc-1.4.1/vncviewer/DesktopWindow.cxx
|
||||
@@ -188,6 +188,8 @@ DesktopWindow::~DesktopWindow()
|
||||
|
||||
OptionsDialog::removeCallback(handleOptions);
|
||||
|
||||
@ -11,11 +11,11 @@ index 40d08ae..7a571ec 100644
|
||||
// FLTK automatically deletes all child widgets, so we shouldn't touch
|
||||
// them ourselves here
|
||||
}
|
||||
diff --git a/vncviewer/Viewport.cxx b/vncviewer/Viewport.cxx
|
||||
index e308a63..41733f9 100644
|
||||
--- a/vncviewer/Viewport.cxx
|
||||
+++ b/vncviewer/Viewport.cxx
|
||||
@@ -112,6 +112,11 @@ Viewport::Viewport(int w, int h, const rfb::PixelFormat& serverPF, CConn* cc_)
|
||||
Index: tigervnc-1.4.1/vncviewer/Viewport.cxx
|
||||
===================================================================
|
||||
--- tigervnc-1.4.1.orig/vncviewer/Viewport.cxx
|
||||
+++ tigervnc-1.4.1/vncviewer/Viewport.cxx
|
||||
@@ -144,6 +144,11 @@ Viewport::Viewport(int w, int h, const r
|
||||
|
||||
Viewport::~Viewport()
|
||||
{
|
||||
@ -26,12 +26,12 @@ index e308a63..41733f9 100644
|
||||
+
|
||||
// Unregister all timeouts in case they get a change tro trigger
|
||||
// again later when this object is already gone.
|
||||
Fl::remove_timeout(handleUpdateTimeout, this);
|
||||
diff --git a/vncviewer/vncviewer.cxx b/vncviewer/vncviewer.cxx
|
||||
index 37d63a6..5bb811d 100644
|
||||
--- a/vncviewer/vncviewer.cxx
|
||||
+++ b/vncviewer/vncviewer.cxx
|
||||
@@ -83,6 +83,8 @@ char vncServerName[VNCSERVERNAMELEN] = { '\0' };
|
||||
Fl::remove_timeout(handlePointerTimeout, this);
|
||||
Index: tigervnc-1.4.1/vncviewer/vncviewer.cxx
|
||||
===================================================================
|
||||
--- tigervnc-1.4.1.orig/vncviewer/vncviewer.cxx
|
||||
+++ tigervnc-1.4.1/vncviewer/vncviewer.cxx
|
||||
@@ -88,6 +88,8 @@ char vncServerName[VNCSERVERNAMELEN] = {
|
||||
static bool exitMainloop = false;
|
||||
static const char *exitError = NULL;
|
||||
|
||||
@ -40,10 +40,10 @@ index 37d63a6..5bb811d 100644
|
||||
void exit_vncviewer(const char *error)
|
||||
{
|
||||
// Prioritise the first error we get as that is probably the most
|
||||
@@ -110,6 +112,16 @@ static void CleanupSignalHandler(int sig)
|
||||
@@ -114,6 +116,16 @@ static void CleanupSignalHandler(int sig
|
||||
// CleanupSignalHandler allows C++ object cleanup to happen because it calls
|
||||
// exit() rather than the default which is to abort.
|
||||
vlog.info("CleanupSignalHandler called");
|
||||
vlog.info(_("CleanupSignalHandler called"));
|
||||
+ delete cc;
|
||||
+ exit(1);
|
||||
+}
|
||||
@ -57,10 +57,19 @@ index 37d63a6..5bb811d 100644
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@@ -384,6 +396,10 @@ int main(int argc, char** argv)
|
||||
@@ -392,11 +404,19 @@ int main(int argc, char** argv)
|
||||
|
||||
init_fltk();
|
||||
|
||||
+ fl_open_display();
|
||||
+
|
||||
+ XSetIOErrorHandler(CleanupXIOErrorHandler);
|
||||
+
|
||||
#if !defined(WIN32) && !defined(__APPLE__)
|
||||
fl_open_display();
|
||||
XkbSetDetectableAutoRepeat(fl_display, True, NULL);
|
||||
#endif
|
||||
|
||||
+ fl_open_display();
|
||||
+
|
||||
+ XSetIOErrorHandler(CleanupXIOErrorHandler);
|
||||
@ -68,7 +77,7 @@ index 37d63a6..5bb811d 100644
|
||||
Configuration::enableViewerParams();
|
||||
|
||||
/* Load the default parameter settings */
|
||||
@@ -484,7 +500,7 @@ int main(int argc, char** argv)
|
||||
@@ -497,7 +517,7 @@ int main(int argc, char** argv)
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -1,12 +1,13 @@
|
||||
diff -up a/vncviewer/CConn.cxx.newfbsize b/vncviewer/CConn.cxx
|
||||
--- a/vncviewer/CConn.cxx.newfbsize 2008-10-23 13:00:59.000000000 +0200
|
||||
+++ b/vncviewer/CConn.cxx 2008-10-23 13:01:11.000000000 +0200
|
||||
@@ -327,6 +327,8 @@ void CConn::beginRect(const Rect& r, uns
|
||||
if (encoding != encodingCopyRect) {
|
||||
Index: tigervnc-1.4.1/vncviewer/CConn.cxx
|
||||
===================================================================
|
||||
--- tigervnc-1.4.1.orig/vncviewer/CConn.cxx
|
||||
+++ tigervnc-1.4.1/vncviewer/CConn.cxx
|
||||
@@ -424,6 +424,8 @@ void CConn::dataRect(const Rect& r, int
|
||||
|
||||
if (encoding != encodingCopyRect)
|
||||
lastServerEncoding = encoding;
|
||||
}
|
||||
+ if (encoding == pseudoEncodingDesktopSize)
|
||||
+ setDesktopSize( r.width(), r.height() );
|
||||
}
|
||||
|
||||
void CConn::endRect(const Rect& r, int encoding)
|
||||
if (!Decoder::supported(encoding)) {
|
||||
vlog.error(_("Unknown rect encoding %d"), encoding);
|
||||
|
@ -1,15 +0,0 @@
|
||||
diff -aur o/doc/rfbtight.tex n/doc/rfbtight.tex
|
||||
--- o/doc/rfbtight.tex 2011-08-09 23:16:48.000000000 +0200
|
||||
+++ n/doc/rfbtight.tex 2012-02-23 19:45:07.473906253 +0100
|
||||
@@ -4,8 +4,9 @@
|
||||
\setlength{\parindent}{0pt}
|
||||
\setlength{\parskip}{1ex plus 0.5ex minus 0.2ex}
|
||||
|
||||
-\newcommand{\typestr}[1]{\textit{#1}}
|
||||
-\newcommand{\literal}[1]{\textit{\textbf{#1}}}
|
||||
+\newcommand\standout{\hspace{0pt plus4em}}
|
||||
+\newcommand{\typestr}[1]{\standout\hspace*{0pt}\textbf{#1}\standout}
|
||||
+\newcommand{\literal}[1]{\standout\hspace*{0pt}\textit{\textbf{#1}}\standout}
|
||||
|
||||
\begin{document}
|
||||
|
@ -1,3 +1,8 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Jan 9 12:50:45 UTC 2015 - msrb@suse.com
|
||||
|
||||
- Update to tigervnc 1.4.1 on xorg-server 1.16.1.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sun Nov 16 09:33:04 UTC 2014 - oscar@naiandei.net
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
#
|
||||
# spec file for package tigervnc
|
||||
#
|
||||
# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
#
|
||||
# All modifications and additions to the file contributed by third parties
|
||||
# remain the property of their copyright owners, unless otherwise agreed
|
||||
@ -17,7 +17,7 @@
|
||||
|
||||
|
||||
Name: tigervnc
|
||||
Version: 1.3.1
|
||||
Version: 1.4.1
|
||||
Release: 0
|
||||
Provides: tightvnc = 1.3.9
|
||||
Obsoletes: tightvnc < 1.3.9
|
||||
@ -90,8 +90,8 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
Summary: A high-performance, platform-neutral implementation of VNC
|
||||
License: GPL-2.0 and MIT
|
||||
Group: System/X11/Servers/XF86_4
|
||||
Source1: tigervnc-1.3.1.tar.bz2
|
||||
Source2: xorg-server-1.14.0.tar.bz2
|
||||
Source1: tigervnc-1.4.1.tar.gz
|
||||
Source2: xorg-server-1.16.1.tar.bz2
|
||||
Source3: vnc.xinetd
|
||||
Source4: 10-libvnc.conf
|
||||
Source5: vnc-server.firewall
|
||||
@ -102,25 +102,19 @@ Source9: vncpasswd.arg
|
||||
Source10: index.vnc
|
||||
|
||||
# Tiger vnc patches
|
||||
Patch1: u_tigervnc-1.3.0-fix-use-after-free.patch
|
||||
Patch2: tigervnc-newfbsize.patch
|
||||
Patch3: tigervnc-clean-pressed-key-on-exit.patch
|
||||
Patch4: tigervnc-sf3492352.diff
|
||||
Patch5: tigervnc-sf3495623.patch
|
||||
Patch6: u_tigervnc-dont-send-ascii-control-characters.patch
|
||||
Patch7: u_tigervnc-ignore-epipe-on-write.patch
|
||||
Patch8: n_tigervnc-date-time.patch
|
||||
Patch9: U_include-vencrypt-only-if-any-subtype-present.patch
|
||||
Patch10: u_tigervnc-check-shm-harder.patch
|
||||
Patch11: u_tigervnc-use_preferred_mode.patch
|
||||
Patch12: u_tigervnc-cve-2014-8240.patch
|
||||
Patch1: tigervnc-newfbsize.patch
|
||||
Patch2: tigervnc-clean-pressed-key-on-exit.patch
|
||||
Patch3: tigervnc-sf3495623.patch
|
||||
Patch4: u_tigervnc-dont-send-ascii-control-characters.patch
|
||||
Patch5: u_tigervnc-ignore-epipe-on-write.patch
|
||||
Patch6: n_tigervnc-date-time.patch
|
||||
Patch7: U_include-vencrypt-only-if-any-subtype-present.patch
|
||||
Patch8: u_tigervnc-use_preferred_mode.patch
|
||||
Patch9: u_tigervnc-cve-2014-8240.patch
|
||||
|
||||
# Xserver patches
|
||||
Patch20: tigervnc-1.2.80-fix-int-to-pointer.patch
|
||||
Patch21: u_aarch64-support.patch
|
||||
Patch22: N_xorg-server-xdmcp.patch
|
||||
Patch23: n_tigervnc-dont-build-gtf.patch
|
||||
Patch24: u_arch-Fix-image-and-bitmap-byte-order-for-ppc64le.patch
|
||||
Patch20: N_xorg-server-xdmcp.patch
|
||||
Patch21: n_tigervnc-dont-build-gtf.patch
|
||||
|
||||
%description
|
||||
TigerVNC is a high-performance, platform-neutral implementation of VNC (Virtual Network Computing),
|
||||
@ -150,23 +144,17 @@ fi
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch6 -p0
|
||||
%patch4 -p0
|
||||
%patch5 -p0
|
||||
%patch6 -p1
|
||||
%patch7 -p0
|
||||
%patch8 -p1
|
||||
%patch9 -p0
|
||||
%patch10 -p0
|
||||
%patch11 -p0
|
||||
%patch12 -p1
|
||||
%patch8 -p0
|
||||
%patch9 -p1
|
||||
|
||||
pushd unix/xserver
|
||||
patch -p1 < ../xserver114.patch
|
||||
patch -p1 < ../xserver116.patch
|
||||
%patch20 -p1
|
||||
%patch21 -p1
|
||||
%patch22 -p1
|
||||
%patch23 -p1
|
||||
%patch24 -p1
|
||||
popd
|
||||
|
||||
%build
|
||||
@ -254,7 +242,7 @@ fi
|
||||
%defattr(-,root,root,-)
|
||||
%ghost %{_bindir}/vncviewer
|
||||
%{_bindir}/vncviewer-tigervnc
|
||||
%exclude /usr/share/doc/tigervnc-1.3.1
|
||||
%exclude /usr/share/doc/tigervnc-1.4.1
|
||||
%doc LICENCE.TXT
|
||||
%doc README.txt
|
||||
%ghost %_mandir/man1/vncviewer.1.gz
|
||||
|
@ -1,42 +0,0 @@
|
||||
Subject: Basic support for aarch64
|
||||
Author: Andreas Schwab <schwab@suse.de>
|
||||
|
||||
Index: xorg-server-1.13.2/hw/xfree86/os-support/linux/lnx_video.c
|
||||
===================================================================
|
||||
--- xorg-server-1.13.2.orig/hw/xfree86/os-support/linux/lnx_video.c
|
||||
+++ xorg-server-1.13.2/hw/xfree86/os-support/linux/lnx_video.c
|
||||
@@ -58,7 +58,8 @@ static Bool ExtendedEnabled = FALSE;
|
||||
!defined(__sparc__) && \
|
||||
!defined(__mips__) && \
|
||||
!defined(__nds32__) && \
|
||||
- !defined(__arm__)
|
||||
+ !defined(__arm__) && \
|
||||
+ !defined(__aarch64__)
|
||||
|
||||
/*
|
||||
* Due to conflicts with "compiler.h", don't rely on <sys/io.h> to declare
|
||||
Index: xorg-server-1.13.2/include/servermd.h
|
||||
===================================================================
|
||||
--- xorg-server-1.13.2.orig/include/servermd.h
|
||||
+++ xorg-server-1.13.2/include/servermd.h
|
||||
@@ -286,6 +286,20 @@ SOFTWARE.
|
||||
#define GLYPHPADBYTES 4
|
||||
#endif /* linux/s390 */
|
||||
|
||||
+#ifdef __aarch64__
|
||||
+
|
||||
+#ifdef __AARCH64EL__
|
||||
+#define IMAGE_BYTE_ORDER LSBFirst
|
||||
+#define BITMAP_BIT_ORDER LSBFirst
|
||||
+#endif
|
||||
+#ifdef __AARCH64EB__
|
||||
+#define IMAGE_BYTE_ORDER MSBFirst
|
||||
+#define BITMAP_BIT_ORDER MSBFirst
|
||||
+#endif
|
||||
+#define GLYPHPADBYTES 4
|
||||
+
|
||||
+#endif /* __aarch64__ */
|
||||
+
|
||||
/* size of buffer to use with GetImage, measured in bytes. There's obviously
|
||||
* a trade-off between the amount of heap used and the number of times the
|
||||
* ddx routine has to be called.
|
@ -1,38 +0,0 @@
|
||||
From: Dinar Valeev <dvaleev@suse.com>
|
||||
Date: Mon Feb 24 10:48:22 2014 +0100
|
||||
Subject: [PATCH]arch: Fix image and bitmap byte order for ppc64le
|
||||
Patch-Mainline: to be upstreamed
|
||||
Git-commit: 3874826e84151917a443f8efb46ea7414c990243
|
||||
Git-repo: git://anongit.freedesktop.org/git/xorg/xserver
|
||||
References: bnc#865069
|
||||
Signed-off-by: Egbert Eich <eich@suse.com>
|
||||
|
||||
So far PPC was big endian for sure. For ppc64le this is no longer
|
||||
true.
|
||||
|
||||
Signed-off-by: Egbert Eich <eich@freedesktop.org>
|
||||
---
|
||||
include/servermd.h | 9 +++++++--
|
||||
1 file changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/include/servermd.h b/include/servermd.h
|
||||
index 11f6c10..256d84b 100644
|
||||
--- a/include/servermd.h
|
||||
+++ b/include/servermd.h
|
||||
@@ -114,8 +114,13 @@ SOFTWARE.
|
||||
|
||||
#if defined(__powerpc__) || defined(__ppc__) || defined(__ppc64__)
|
||||
|
||||
-#define IMAGE_BYTE_ORDER MSBFirst
|
||||
-#define BITMAP_BIT_ORDER MSBFirst
|
||||
+#if defined(__LITTLE_ENDIAN__)
|
||||
+#define IMAGE_BYTE_ORDER LSBFirst
|
||||
+#define BITMAP_BIT_ORDER LSBFirst
|
||||
+#else
|
||||
+#define IMAGE_BYTE_ORDER MSBFirst
|
||||
+#define BITMAP_BIT_ORDER MSBFirst
|
||||
+#endif
|
||||
#define GLYPHPADBYTES 4
|
||||
|
||||
#endif /* PowerPC */
|
||||
|
@ -1,115 +0,0 @@
|
||||
Author: Michal Srb <msrb@suse.com>
|
||||
Subject: Fix use after free in ZRLEEncoder.
|
||||
Patch-Mainline: To be upstreamed
|
||||
References: bnc#840433
|
||||
|
||||
There is use after free crash when client using zrle disconnects:
|
||||
ZRLEEncoder contains zos variable (rdr::ZlibOutStream) and mos variable (pointer to rdr::MemOutStream).
|
||||
mos is always allocated in constructor (it could be a copy of static sharedMos pointer if sharedMos != 0, but it is always 0).
|
||||
When ZRLEEncoder::writeRect is called, any of zrleEncode* functions sets mos as an underlying stream of zos.
|
||||
When ZRLEEncoder is destructed, mos is deleted (sharedMos is always 0), then zos is implicitly destructed, but zos accesses it's underlying stream in it's destructor!
|
||||
|
||||
We need to destruct mos first and zos second when ZRLEEncoder is destructed.
|
||||
As sharedMos is never used, we can remove that, simplify ZRLEEncoder and turn zos into a member variable same as mos. They will be both implicitly destructed in reverse order of declaration.
|
||||
|
||||
diff -ur tigervnc-1.3.0-orig/common/rfb/ZRLEEncoder.cxx tigervnc-1.3.0/common/rfb/ZRLEEncoder.cxx
|
||||
--- tigervnc-1.3.0-orig/common/rfb/ZRLEEncoder.cxx 2013-09-17 00:18:28.557911306 +0300
|
||||
+++ tigervnc-1.3.0/common/rfb/ZRLEEncoder.cxx 2013-09-17 00:19:57.487915741 +0300
|
||||
@@ -26,7 +26,6 @@
|
||||
|
||||
using namespace rfb;
|
||||
|
||||
-rdr::MemOutStream* ZRLEEncoder::sharedMos = 0;
|
||||
int ZRLEEncoder::maxLen = 4097 * 1024; // enough for width 16384 32-bit pixels
|
||||
|
||||
IntParameter zlibLevel("ZlibLevel","Zlib compression level",-1);
|
||||
@@ -55,33 +54,27 @@
|
||||
}
|
||||
|
||||
ZRLEEncoder::ZRLEEncoder(SMsgWriter* writer_)
|
||||
- : writer(writer_), zos(0,0,zlibLevel)
|
||||
+ : writer(writer_), zos(0,0,zlibLevel), mos(129*1024)
|
||||
{
|
||||
- if (sharedMos)
|
||||
- mos = sharedMos;
|
||||
- else
|
||||
- mos = new rdr::MemOutStream(129*1024);
|
||||
}
|
||||
|
||||
ZRLEEncoder::~ZRLEEncoder()
|
||||
{
|
||||
- if (!sharedMos)
|
||||
- delete mos;
|
||||
}
|
||||
|
||||
bool ZRLEEncoder::writeRect(const Rect& r, TransImageGetter* ig, Rect* actual)
|
||||
{
|
||||
rdr::U8* imageBuf = writer->getImageBuf(64 * 64 * 4 + 4);
|
||||
- mos->clear();
|
||||
+ mos.clear();
|
||||
bool wroteAll = true;
|
||||
*actual = r;
|
||||
|
||||
switch (writer->bpp()) {
|
||||
case 8:
|
||||
- wroteAll = zrleEncode8(r, mos, &zos, imageBuf, maxLen, actual, ig);
|
||||
+ wroteAll = zrleEncode8(r, &mos, &zos, imageBuf, maxLen, actual, ig);
|
||||
break;
|
||||
case 16:
|
||||
- wroteAll = zrleEncode16(r, mos, &zos, imageBuf, maxLen, actual, ig);
|
||||
+ wroteAll = zrleEncode16(r, &mos, &zos, imageBuf, maxLen, actual, ig);
|
||||
break;
|
||||
case 32:
|
||||
{
|
||||
@@ -94,16 +87,16 @@
|
||||
if ((fitsInLS3Bytes && pf.isLittleEndian()) ||
|
||||
(fitsInMS3Bytes && pf.isBigEndian()))
|
||||
{
|
||||
- wroteAll = zrleEncode24A(r, mos, &zos, imageBuf, maxLen, actual, ig);
|
||||
+ wroteAll = zrleEncode24A(r, &mos, &zos, imageBuf, maxLen, actual, ig);
|
||||
}
|
||||
else if ((fitsInLS3Bytes && pf.isBigEndian()) ||
|
||||
(fitsInMS3Bytes && pf.isLittleEndian()))
|
||||
{
|
||||
- wroteAll = zrleEncode24B(r, mos, &zos, imageBuf, maxLen, actual, ig);
|
||||
+ wroteAll = zrleEncode24B(r, &mos, &zos, imageBuf, maxLen, actual, ig);
|
||||
}
|
||||
else
|
||||
{
|
||||
- wroteAll = zrleEncode32(r, mos, &zos, imageBuf, maxLen, actual, ig);
|
||||
+ wroteAll = zrleEncode32(r, &mos, &zos, imageBuf, maxLen, actual, ig);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -111,8 +104,8 @@
|
||||
|
||||
writer->startRect(*actual, encodingZRLE);
|
||||
rdr::OutStream* os = writer->getOutStream();
|
||||
- os->writeU32(mos->length());
|
||||
- os->writeBytes(mos->data(), mos->length());
|
||||
+ os->writeU32(mos.length());
|
||||
+ os->writeBytes(mos.data(), mos.length());
|
||||
writer->endRect();
|
||||
return wroteAll;
|
||||
}
|
||||
diff -ur tigervnc-1.3.0-orig/common/rfb/ZRLEEncoder.h tigervnc-1.3.0/common/rfb/ZRLEEncoder.h
|
||||
--- tigervnc-1.3.0-orig/common/rfb/ZRLEEncoder.h 2013-09-17 00:18:28.558911306 +0300
|
||||
+++ tigervnc-1.3.0/common/rfb/ZRLEEncoder.h 2013-09-17 00:20:34.372917581 +0300
|
||||
@@ -38,16 +38,11 @@
|
||||
// width, in this example about 128 bytes).
|
||||
static void setMaxLen(int m) { maxLen = m; }
|
||||
|
||||
- // setSharedMos() sets a MemOutStream to be shared amongst all
|
||||
- // ZRLEEncoders. Should be called before any ZRLEEncoders are created.
|
||||
- static void setSharedMos(rdr::MemOutStream* mos_) { sharedMos = mos_; }
|
||||
-
|
||||
private:
|
||||
ZRLEEncoder(SMsgWriter* writer);
|
||||
SMsgWriter* writer;
|
||||
+ rdr::MemOutStream mos;
|
||||
rdr::ZlibOutStream zos;
|
||||
- rdr::MemOutStream* mos;
|
||||
- static rdr::MemOutStream* sharedMos;
|
||||
static int maxLen;
|
||||
};
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
Index: vncviewer/X11PixelBuffer.cxx
|
||||
===================================================================
|
||||
--- vncviewer/X11PixelBuffer.cxx (revision 5186)
|
||||
+++ vncviewer/X11PixelBuffer.cxx (working copy)
|
||||
@@ -158,6 +158,8 @@
|
||||
Bool pixmaps;
|
||||
XErrorHandler old_handler;
|
||||
Status status;
|
||||
+ Window test_window;
|
||||
+ GC test_gc;
|
||||
|
||||
if (!XShmQueryVersion(fl_display, &major, &minor, &pixmaps))
|
||||
return 0;
|
||||
@@ -187,6 +189,12 @@
|
||||
old_handler = XSetErrorHandler(XShmAttachErrorHandler);
|
||||
|
||||
XShmAttach(fl_display, shminfo);
|
||||
+ test_window = XCreateSimpleWindow(fl_display, XDefaultRootWindow(fl_display), 0, 0, width(), height(), 0, 0, 0);
|
||||
+ test_gc = XCreateGC(fl_display, test_window, 0, 0);
|
||||
+ XShmPutImage(fl_display, test_window, test_gc, xim, 0, 0, 0, 0, width(), height(), False);
|
||||
+ XFreeGC(fl_display, test_gc);
|
||||
+ XDestroyWindow(fl_display, test_window);
|
||||
+
|
||||
XSync(fl_display, False);
|
||||
|
||||
XSetErrorHandler(old_handler);
|
@ -2,9 +2,10 @@ Patch-Mainline: To be upstreamed
|
||||
References: bnc#900896 CVE-2014-8240
|
||||
Signed-off-by: Michal Srb <msrb@suse.com>
|
||||
|
||||
diff -up tigervnc-1.3.1/unix/x0vncserver/Image.cxx.CVE-2014-8240 tigervnc-1.3.1/unix/x0vncserver/Image.cxx
|
||||
--- tigervnc-1.3.1/unix/x0vncserver/Image.cxx.CVE-2014-8240 2008-03-19 16:14:48.000000000 +0000
|
||||
+++ tigervnc-1.3.1/unix/x0vncserver/Image.cxx 2014-10-16 12:23:08.013339234 +0100
|
||||
Index: tigervnc-1.4.1/unix/x0vncserver/Image.cxx
|
||||
===================================================================
|
||||
--- tigervnc-1.4.1.orig/unix/x0vncserver/Image.cxx
|
||||
+++ tigervnc-1.4.1/unix/x0vncserver/Image.cxx
|
||||
@@ -80,6 +80,14 @@ void Image::Init(int width, int height)
|
||||
xim = XCreateImage(dpy, vis, DefaultDepth(dpy, DefaultScreen(dpy)),
|
||||
ZPixmap, 0, 0, width, height, BitmapPad(dpy), 0);
|
||||
@ -38,12 +39,13 @@ diff -up tigervnc-1.3.1/unix/x0vncserver/Image.cxx.CVE-2014-8240 tigervnc-1.3.1/
|
||||
}
|
||||
|
||||
shminfo->shmid = shmget(IPC_PRIVATE,
|
||||
diff -up tigervnc-1.3.1/vncviewer/X11PixelBuffer.cxx.CVE-2014-8240 tigervnc-1.3.1/vncviewer/X11PixelBuffer.cxx
|
||||
--- tigervnc-1.3.1/vncviewer/X11PixelBuffer.cxx.CVE-2014-8240 2011-08-23 13:04:46.000000000 +0100
|
||||
+++ tigervnc-1.3.1/vncviewer/X11PixelBuffer.cxx 2014-10-16 12:22:53.053261132 +0100
|
||||
@@ -105,6 +105,15 @@ PlatformPixelBuffer::PlatformPixelBuffer
|
||||
ZPixmap, 0, 0, width, height, BitmapPad(fl_display), 0);
|
||||
assert(xim);
|
||||
Index: tigervnc-1.4.1/vncviewer/X11PixelBuffer.cxx
|
||||
===================================================================
|
||||
--- tigervnc-1.4.1.orig/vncviewer/X11PixelBuffer.cxx
|
||||
+++ tigervnc-1.4.1/vncviewer/X11PixelBuffer.cxx
|
||||
@@ -106,6 +106,15 @@ X11PixelBuffer::X11PixelBuffer(int width
|
||||
if (!xim)
|
||||
throw rfb::Exception(_("Could not create framebuffer image"));
|
||||
|
||||
+ if (xim->bytes_per_line <= 0 ||
|
||||
+ xim->height <= 0 ||
|
||||
@ -55,9 +57,9 @@ diff -up tigervnc-1.3.1/vncviewer/X11PixelBuffer.cxx.CVE-2014-8240 tigervnc-1.3.
|
||||
+ }
|
||||
+
|
||||
xim->data = (char*)malloc(xim->bytes_per_line * xim->height);
|
||||
assert(xim->data);
|
||||
}
|
||||
@@ -169,6 +178,16 @@ int PlatformPixelBuffer::setupShm()
|
||||
if (!xim->data)
|
||||
throw rfb::Exception(_("Not enough memory for framebuffer"));
|
||||
@@ -172,6 +181,16 @@ int X11PixelBuffer::setupShm()
|
||||
if (!xim)
|
||||
goto free_shminfo;
|
||||
|
||||
|
@ -5,10 +5,10 @@ References: bnc#864666
|
||||
|
||||
Index: vncviewer/Viewport.cxx
|
||||
===================================================================
|
||||
--- vncviewer/Viewport.cxx (revision 5162)
|
||||
+++ vncviewer/Viewport.cxx (working copy)
|
||||
@@ -753,7 +753,13 @@
|
||||
return XK_VoidSymbol;
|
||||
--- vncviewer/Viewport.cxx.orig
|
||||
+++ vncviewer/Viewport.cxx
|
||||
@@ -1044,7 +1044,13 @@ rdr::U32 Viewport::translateKeyEvent(voi
|
||||
return NoSymbol;
|
||||
}
|
||||
|
||||
- ucs = fl_utf8decode(keyText, NULL, NULL);
|
||||
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f7adfa5c1dd5cf228bb54794016d9e11ef389c1a70f91c33d72691c52e8a0f2b
|
||||
size 5530988
|
3
xorg-server-1.16.1.tar.bz2
Normal file
3
xorg-server-1.16.1.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ad7fa80413feeba7855ba2ec5d72bfbc3e191b7ec56c81291e7c9c0a3a9f881e
|
||||
size 5829838
|
Loading…
Reference in New Issue
Block a user