diff src/ops.c @ 4201:3fd805ca2a6a v7.3.852

updated for version 7.3.852 Problem: system() breaks clipboard text. (Yukihiro Nakadaira) Solution: Use Xutf8TextPropertyToTextList(). (Christian Brabandt) Also do not put the text in the clip buffer if conversion fails.
author Bram Moolenaar <bram@vim.org>
date Thu, 07 Mar 2013 18:02:30 +0100
parents 65ef7c96d65f
children eea32254940f
line wrap: on
line diff
--- a/src/ops.c
+++ b/src/ops.c
@@ -5828,6 +5828,8 @@ x11_export_final_selection()
 					       && len < 1024*1024 && len > 0)
     {
 #ifdef FEAT_MBYTE
+	int ok = TRUE;
+
 	/* The CUT_BUFFER0 is supposed to always contain latin1.  Convert from
 	 * 'enc' when it is a multi-byte encoding.  When 'enc' is an 8-bit
 	 * encoding conversion usually doesn't work, so keep the text as-is.
@@ -5842,6 +5844,7 @@ x11_export_final_selection()
 		int	intlen = len;
 		char_u	*conv_str;
 
+		vc.vc_fail = TRUE;
 		conv_str = string_convert(&vc, str, &intlen);
 		len = intlen;
 		if (conv_str != NULL)
@@ -5849,12 +5852,26 @@ x11_export_final_selection()
 		    vim_free(str);
 		    str = conv_str;
 		}
+		else
+		{
+		    ok = FALSE;
+		}
 		convert_setup(&vc, NULL, NULL);
 	    }
+	    else
+	    {
+		ok = FALSE;
+	    }
 	}
-#endif
-	XStoreBuffer(dpy, (char *)str, (int)len, 0);
-	XFlush(dpy);
+
+	/* Do not store the string if conversion failed.  Better to use any
+	 * other selection than garbled text. */
+	if (ok)
+#endif
+	{
+	    XStoreBuffer(dpy, (char *)str, (int)len, 0);
+	    XFlush(dpy);
+	}
     }
 
     vim_free(str);