From bc5248557035b21a93ed938428010322615540b3 Mon Sep 17 00:00:00 2001 From: Alex Leitner Date: Fri, 7 Oct 2022 20:11:24 +0000 Subject: [PATCH] GUACAMOLE-1682: Normalize conflicting newline encodings in clipboards between Linux and Windows systems for ssh sessions. --- src/terminal/terminal.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/terminal/terminal.c b/src/terminal/terminal.c index 08cdc85e..cb05ee5d 100644 --- a/src/terminal/terminal.c +++ b/src/terminal/terminal.c @@ -20,6 +20,7 @@ #include "common/clipboard.h" #include "common/cursor.h" +#include "common/iconv.h" #include "terminal/buffer.h" #include "terminal/color-scheme.h" #include "terminal/common.h" @@ -2165,11 +2166,20 @@ void guac_terminal_clipboard_reset(guac_terminal* terminal, void guac_terminal_clipboard_append(guac_terminal* terminal, const char* data, int length) { - guac_common_clipboard_append(terminal->clipboard, data, length); + + /* Allocate and clear space for the converted data */ + char output_data[GUAC_COMMON_CLIPBOARD_MAX_LENGTH]; + char* output = output_data; + + /* Convert clipboard contents */ + guac_iconv(GUAC_READ_UTF8_NORMALIZED, &data, length, + GUAC_WRITE_UTF8, &output, GUAC_COMMON_CLIPBOARD_MAX_LENGTH); + + guac_common_clipboard_append(terminal->clipboard, output_data, output - output_data); } void guac_terminal_remove_user(guac_terminal* terminal, guac_user* user) { /* Remove the user from the terminal cursor */ guac_common_cursor_remove_user(terminal->cursor, user); -} \ No newline at end of file +}