summaryrefslogtreecommitdiffstats
path: root/source/xap/rdesktop/rdesktop-1.8.0-fix-missing-ui.diff
diff options
context:
space:
mode:
Diffstat (limited to 'source/xap/rdesktop/rdesktop-1.8.0-fix-missing-ui.diff')
-rw-r--r--source/xap/rdesktop/rdesktop-1.8.0-fix-missing-ui.diff77
1 files changed, 77 insertions, 0 deletions
diff --git a/source/xap/rdesktop/rdesktop-1.8.0-fix-missing-ui.diff b/source/xap/rdesktop/rdesktop-1.8.0-fix-missing-ui.diff
new file mode 100644
index 000000000..efad2f335
--- /dev/null
+++ b/source/xap/rdesktop/rdesktop-1.8.0-fix-missing-ui.diff
@@ -0,0 +1,77 @@
+From 8aeb027877c517510ea39c26c37c6dbd46401800 Mon Sep 17 00:00:00 2001
+From: mancha <mancha1@hush.com>
+Date: Sun, 20 Oct 2013
+Subject: Fix crash with -P and/or -N
+
+Make sure that ui is created if processing demand active PDU.
+
+Relevant upstream revisions:
+----------------------------
+http://sourceforge.net/p/rdesktop/code/1731/
+http://sourceforge.net/p/rdesktop/code/1732/
+http://sourceforge.net/p/rdesktop/code/1741/
+
+---
+ proto.h | 1 +
+ rdesktop.c | 20 +++++++++++++-------
+ rdp.c | 3 +++
+ 3 files changed, 17 insertions(+), 7 deletions(-)
+
+--- a/proto.h 2013-06-20
++++ b/proto.h 2013-10-20
+@@ -144,6 +144,7 @@ RD_BOOL subprocess(char *const argv[], s
+ char *l_to_a(long N, int base);
+ int load_licence(unsigned char **data);
+ void save_licence(unsigned char *data, int length);
++void rd_create_ui(void);
+ RD_BOOL rd_pstcache_mkdir(void);
+ int rd_open_file(char *filename);
+ void rd_close_file(int fd);
+--- a/rdesktop.c 2013-10-20
++++ b/rdesktop.c 2013-10-20
+@@ -1132,13 +1132,7 @@ main(int argc, char *argv[])
+ DEBUG(("Connection successful.\n"));
+ memset(password, 0, sizeof(password));
+
+- /* only create a window if we dont have one intialized */
+- if (!ui_have_window())
+- {
+- if (!ui_create_window())
+- return EX_OSERR;
+- }
+-
++ rd_create_ui();
+ tcp_run_ui(True);
+
+ g_redirect = False;
+@@ -1732,6 +1726,18 @@ save_licence(unsigned char *data, int le
+ close(fd);
+ }
+
++/* create rdesktop ui */
++void
++rd_create_ui()
++{
++ /* only create a window if we dont have one intialized */
++ if (!ui_have_window())
++ {
++ if (!ui_create_window())
++ exit(EX_OSERR);
++ }
++}
++
+ /* Create the bitmap cache directory */
+ RD_BOOL
+ rd_pstcache_mkdir(void)
+--- a/rdp.c 2013-06-20
++++ b/rdp.c 2013-10-20
+@@ -1044,6 +1044,9 @@ process_demand_active(STREAM s)
+ uint8 type;
+ uint16 len_src_descriptor, len_combined_caps;
+
++ /* at this point we need to ensure that we have ui created */
++ rd_create_ui();
++
+ in_uint32_le(s, g_rdp_shareid);
+ in_uint16_le(s, len_src_descriptor);
+ in_uint16_le(s, len_combined_caps);