]> git.eshelyaron.com Git - emacs.git/commitdiff
Escape NUL bytes in X selections (Bug#6991)
authorNoam Postavsky <npostavs@gmail.com>
Sun, 12 Feb 2017 00:47:55 +0000 (19:47 -0500)
committerNoam Postavsky <npostavs@gmail.com>
Thu, 29 Jun 2017 23:40:23 +0000 (19:40 -0400)
* lisp/term/w32-win.el (w32--set-selection):
* lisp/select.el (xselect--encode-string): Replace NUL bytes with
"\0".
* doc/emacs/killing.texi: Document new behavior.
* etc/NEWS (times): Announce it.

doc/emacs/killing.texi
etc/NEWS
lisp/select.el
lisp/term/w32-win.el

index 47de0531292e2d79401b8d12b6f30ba31c56523e..0b5efd04a181388ba207188568aec809443ebbcb 100644 (file)
@@ -519,6 +519,10 @@ when exiting Emacs; if you wish to prevent Emacs from transferring
 data to the clipboard manager, change the variable
 @code{x-select-enable-clipboard-manager} to @code{nil}.
 
+  Since strings containing NUL bytes are usually truncated when passed
+through the clipboard, Emacs replaces such characters with ``\0''
+before transfering them to the system's clipboard.
+
 @vindex select-enable-primary
 @findex clipboard-kill-region
 @findex clipboard-kill-ring-save
index 319b40f5d1a267e7f37bba39ac21357c62e9862a..dc9393c87d46db7a3f269f6042e9706f7362af99 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -325,6 +325,10 @@ debug.el and edebug.el have been updated to heed to this variable.
 The old behaviour of using 'prin1' can be restored by customizing the
 new option 'debugger-print-function'.
 
++++
+** NUL bytes in strings copied to the system clipboard are now
+replaced with "\0".
+
 +++
 ** The new variable 'x-ctrl-keysym' has been added to the existing
 roster of X keysyms.  It can be used in combination with another
index 4849d7d515ef10330bb8a403fa6cbd6e392fcf82..579c5c7e2ee7f7845a23bdbe3ab642ac20f7c9dd 100644 (file)
@@ -475,6 +475,9 @@ two markers or an overlay.  Otherwise, it is nil."
           (t
            (error "Unknown selection type: %S" type)))))
 
+      ;; Most programs are unable to handle NUL bytes in strings.
+      (setq str (replace-regexp-in-string "\0" "\\0" str t t))
+
       (setq next-selection-coding-system nil)
       (cons type str))))
 
index fda93884c40a05c9529cdc928a368775b6346631..be895a040da7c3bff359c6038e642a109cc6bec0 100644 (file)
@@ -396,7 +396,7 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.")
 ;;; Fix interface to (X-specific) mouse.el
 (defun w32--set-selection (type value)
   (if (eq type 'CLIPBOARD)
-      (w32-set-clipboard-data value)
+      (w32-set-clipboard-data (replace-regexp-in-string "\0" "\\0" value t t))
     (put 'x-selections (or type 'PRIMARY) value)))
 
 (defun w32--get-selection  (&optional type data-type)