patch 8.2.3548: GTK GUI crashen when reading from stdin

Problem:    GTK GUI crashen when reading from stdin.
Solution:   Do not overwrite the NUL after the string. (closes #9028)
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index e107c5e..d46f819 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -5744,12 +5744,16 @@
 	    }
 	}
 
-	// temporarily zero terminate substring, print, restore char, wrap
-	backup_ch = *(cs + slen);
-	*(cs + slen) = 0;
+	if (slen < len)
+	{
+	    // temporarily zero terminate substring, print, restore char, wrap
+	    backup_ch = *(cs + slen);
+	    *(cs + slen) = NUL;
+	}
 	len_sum += gui_gtk2_draw_string_ext(row, col + len_sum,
 						 cs, slen, flags, needs_pango);
-	*(cs + slen) = backup_ch;
+	if (slen < len)
+	    *(cs + slen) = backup_ch;
 	cs += slen;
 	byte_sum += slen;
 	needs_pango = should_need_pango;
diff --git a/src/testdir/test_gui.vim b/src/testdir/test_gui.vim
index 84836e6..133298d 100644
--- a/src/testdir/test_gui.vim
+++ b/src/testdir/test_gui.vim
@@ -145,6 +145,28 @@
   let @+ = quoteplus_saved
 endfunc
 
+func Test_gui_read_stdin()
+  CheckUnix
+
+  call writefile(['some', 'lines'], 'Xstdin')
+  let script =<< trim END
+      call writefile(getline(1, '$'), 'XstdinOK')
+      qa!
+  END
+  call writefile(script, 'Xscript')
+
+  " Cannot use --not-a-term here, the "reading from stdin" message would not be
+  " displayed.
+  let vimcmd = substitute(GetVimCommand(), '--not-a-term', '', '')
+
+  call system('cat Xstdin | ' .. vimcmd .. ' -f -g -S Xscript -')
+  call assert_equal(['some', 'lines'], readfile('XstdinOK'))
+
+  call delete('Xstdin')
+  call delete('XstdinOK')
+  call delete('Xscript')
+endfunc
+
 func Test_set_background()
   let background_saved = &background
 
diff --git a/src/version.c b/src/version.c
index 3f80877..1e7fb75 100644
--- a/src/version.c
+++ b/src/version.c
@@ -758,6 +758,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3548,
+/**/
     3547,
 /**/
     3546,