diff --git a/tigervnc-avoid-invalid-xfree-for-xclasshint.patch b/tigervnc-avoid-invalid-xfree-for-xclasshint.patch new file mode 100644 index 0000000..bf43d09 --- /dev/null +++ b/tigervnc-avoid-invalid-xfree-for-xclasshint.patch @@ -0,0 +1,24 @@ +From 6c8387018b130eb4ef69ea377e9154ba04f0fd50 Mon Sep 17 00:00:00 2001 +From: Pierre Ossman +Date: Tue, 22 Oct 2024 09:58:27 +0200 +Subject: [PATCH] Avoid invalid XFree for XClassHint + +It seems XGetClassHint() doesn't set the pointers to NULL if there is no +name, so we need to make sure it is cleared beforehand. Otherwise we can +get an invalid pointer given to XFree(). +--- + unix/tx/TXWindow.cxx | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/unix/tx/TXWindow.cxx b/unix/tx/TXWindow.cxx +index b6a29d679..639c13827 100644 +--- a/unix/tx/TXWindow.cxx ++++ b/unix/tx/TXWindow.cxx +@@ -313,6 +313,7 @@ void TXWindow::toplevel(const char* name, TXDeleteWindowCallback* dwc_, + void TXWindow::setName(const char* name) + { + XClassHint classHint; ++ memset(&classHint, 0, sizeof(classHint)); + XGetClassHint(dpy, win(), &classHint); + XFree(classHint.res_name); + classHint.res_name = (char*)name; diff --git a/tigervnc-do-proper-toplevel-window-setup-for-selection-window.patch b/tigervnc-do-proper-toplevel-window-setup-for-selection-window.patch new file mode 100644 index 0000000..edc285e --- /dev/null +++ b/tigervnc-do-proper-toplevel-window-setup-for-selection-window.patch @@ -0,0 +1,22 @@ +From 9e15952d02e01b8e19e7459bcabcd47dc63a1726 Mon Sep 17 00:00:00 2001 +From: Pierre Ossman +Date: Tue, 22 Oct 2024 09:59:30 +0200 +Subject: [PATCH] Do proper top level window setup for selection window + +--- + unix/x0vncserver/XSelection.cxx | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/unix/x0vncserver/XSelection.cxx b/unix/x0vncserver/XSelection.cxx +index 72dd537f4..c724d2ac4 100644 +--- a/unix/x0vncserver/XSelection.cxx ++++ b/unix/x0vncserver/XSelection.cxx +@@ -37,7 +37,7 @@ XSelection::XSelection(Display* dpy_, XSelectionHandler* handler_) + probeProperty = XInternAtom(dpy, "TigerVNC_ProbeProperty", False); + transferProperty = XInternAtom(dpy, "TigerVNC_TransferProperty", False); + timestampProperty = XInternAtom(dpy, "TigerVNC_TimestampProperty", False); +- setName("TigerVNC Clipboard (x0vncserver)"); ++ toplevel("TigerVNC Clipboard (x0vncserver)"); + addEventMask(PropertyChangeMask); // Required for PropertyNotify events + } + diff --git a/tigervnc.spec b/tigervnc.spec index 8e0ea3f..c06dfbe 100644 --- a/tigervnc.spec +++ b/tigervnc.spec @@ -5,7 +5,7 @@ Name: tigervnc Version: 1.14.1 -Release: 3%{?dist} +Release: 4%{?dist} Summary: A TigerVNC remote display system %global _hardened_build 1 @@ -31,6 +31,8 @@ Patch3: tigervnc-add-option-allowing-to-connect-only-user-owning-session # Upstream patches Patch50: tigervnc-vncsession-move-existing-log-to-log-old-if-present.patch Patch51: tigervnc-add-clipboard-support-to-x0vncserver.patch +Patch52: tigervnc-do-proper-toplevel-window-setup-for-selection-window.patch +Patch53: tigervnc-avoid-invalid-xfree-for-xclasshint.patch # Upstreamable patches Patch80: tigervnc-dont-get-pointer-position-for-floating-device.patch @@ -210,6 +212,8 @@ popd # Upstream patches %patch -P50 -p1 -b .vncsession-move-existing-log-to-log-old-if-present %patch -P51 -p1 -b .add-clipboard-support-to-x0vncserver +%patch -P52 -p1 -b .do-proper-toplevel-window-setup-for-selection-window +%patch -P53 -p1 -b .avoid-invalid-xfree-for-xclasshint # Upstreamable patches %patch -P80 -p1 -b .dont-get-pointer-position-for-floating-device @@ -396,8 +400,12 @@ fi %ghost %verify(not md5 size mode mtime) %{_sharedstatedir}/selinux/%{selinuxtype}/active/modules/200/%{modulename} %changelog +* Tue Jan 21 2025 Jan Grulich - 1.14.1-4 +- Fix crash in clipboard support in x0vncserver + Resolves: RHEL-74216 + * Thu Jan 16 2025 Jan Grulich - 1.14.1-3 -- Add cliboard support to x0vncserver +- Add clipboard support to x0vncserver Resolves: RHEL-74216 * Thu Oct 31 2024 Jan Grulich - 1.14.1-2