bug#5225: dired-diff should be more safe
Juri Linkov <[email protected]> Wed, 16 Dec 2009 11:19:09 +0200
| Newsgroups | gmane.emacs.bugs,gmane.emacs.pretest.bugs |
|---|---|
| Organization | JURTA |
| Message-ID | <[email protected]> |
Currently using `dired-diff' has a high risk of deleting a file. When two compared file names refer to the same file, or when one of them is the directory name of the second file (thus the file is compared against itself), then the user may not notice that `diff' compares the same file with itself, and when `diff' says there are no differences, decide to delete the file (thinking that two files have the same content). The patch below eliminates this risk by signalling an error when comparing the same file to itself: === modified file 'lisp/dired-aux.el' --- lisp/dired-aux.el 2009-11-25 17:15:19 +0000 +++ lisp/dired-aux.el 2009-12-16 09:16:34 +0000 @@ -60,27 +60,44 @@ (if (stringp diff-switches) diff-switches (mapconcat 'identity diff-switches " "))))))) - (diff file (dired-get-filename t) switches)) + (let ((current (dired-get-filename t))) + (when (or (equal (expand-file-name file) + (expand-file-name current)) + (and (file-directory-p file) + (equal (expand-file-name current file) + (expand-file-name current)))) + (error "Attempt to compare the file to itself")) + (diff file current switches))) ;;;###autoload (defun dired-backup-diff (&optional switches) -- Juri Linkov http://www.jurta.org/emacs/