GNU bug report logs - #29189
25.3; Dired does not work with binary filenames

Previous Next

Package: emacs;

Reported by: Allen Li <vianchielfaura <at> gmail.com>

Date: Tue, 7 Nov 2017 09:04:01 UTC

Severity: minor

Found in version 25.3

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Eli Zaretskii <eliz <at> gnu.org>
To: vianchielfaura <at> gmail.com
Cc: handa <at> gnu.org, 29189 <at> debbugs.gnu.org, schwab <at> suse.de
Subject: bug#29189: 25.3; Dired does not work with binary filenames
Date: Sat, 11 Nov 2017 17:21:21 +0200
> Date: Sat, 11 Nov 2017 16:18:20 +0200
> From: Eli Zaretskii <eliz <at> gnu.org>
> Cc: schwab <at> suse.de, 29189 <at> debbugs.gnu.org
> 
> The problem is in insert-directory.  It manually decodes each file
> name which was output by 'ls', and that produces strangely
> inconsistent results when the file name includes raw bytes: sometimes
> we get the 2-byte sequence starting with \300, sometimes the original
> byte survives unchanged, and sometimes I see the sequence \301\200
> instead of a lone \300 in the file name.  I'm trying to understand
> what's going on and find a solution to that.

Can you please try the patch below?  (You will need to re-dump Emacs
after patching files.el.)

diff --git a/lisp/files.el b/lisp/files.el
index b47411f..43198bc 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -6803,10 +6803,13 @@ insert-directory
 			    val (get-text-property (point) 'dired-filename))
 		      (goto-char (next-single-property-change
 				  (point) 'dired-filename nil (point-max)))
-		      ;; Force no eol conversion on a file name, so
-		      ;; that CR is preserved.
-		      (decode-coding-region pos (point)
-					    (if val coding-no-eol coding))
+                      (let ((fn (buffer-substring-no-properties pos (point))))
+                        (delete-region pos (point))
+                        (insert
+		         ;; Force no eol conversion on a file name, so
+		         ;; that CR is preserved.
+		         (decode-coding-string (string-make-unibyte fn)
+					       (if val coding-no-eol coding))))
 		      (if val
 			  (put-text-property pos (point)
 					     'dired-filename t)))))))




This bug report was last modified 6 years and 261 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.