From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Thierry Volpiatto Newsgroups: gmane.emacs.bugs Subject: bug#10489: 24.0.92; dired-do-copy may create infinite directory hierarchy Date: Fri, 13 Jan 2012 10:38:45 +0100 Message-ID: <87lipcrlga.fsf@gmail.com> References: <87mx9su32g.fsf@web.de> <87sjjkfvwt.fsf@gmail.com> <8362ggkquq.fsf@gnu.org> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: dough.gmane.org 1326447641 14220 80.91.229.12 (13 Jan 2012 09:40:41 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Fri, 13 Jan 2012 09:40:41 +0000 (UTC) To: 10489@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Fri Jan 13 10:40:37 2012 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([140.186.70.17]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Rldci-0004UB-JE for geb-bug-gnu-emacs@m.gmane.org; Fri, 13 Jan 2012 10:40:36 +0100 Original-Received: from localhost ([::1]:53498 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rldch-0005Zt-VU for geb-bug-gnu-emacs@m.gmane.org; Fri, 13 Jan 2012 04:40:35 -0500 Original-Received: from eggs.gnu.org ([140.186.70.92]:53123) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rldcd-0005Ur-7Z for bug-gnu-emacs@gnu.org; Fri, 13 Jan 2012 04:40:32 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RldcY-0007bQ-Pb for bug-gnu-emacs@gnu.org; Fri, 13 Jan 2012 04:40:31 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:32934) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RldcY-0007bM-LI for bug-gnu-emacs@gnu.org; Fri, 13 Jan 2012 04:40:26 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1Rldd7-0004BS-VU for bug-gnu-emacs@gnu.org; Fri, 13 Jan 2012 04:41:02 -0500 X-Loop: help-debbugs@gnu.org In-Reply-To: <87mx9su32g.fsf@web.de> Resent-From: Thierry Volpiatto Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 13 Jan 2012 09:41:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 10489 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.132644760416014 (code B ref -1); Fri, 13 Jan 2012 09:41:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 13 Jan 2012 09:40:04 +0000 Original-Received: from localhost ([127.0.0.1]:55840 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1RldcA-0004AD-LC for submit@debbugs.gnu.org; Fri, 13 Jan 2012 04:40:03 -0500 Original-Received: from eggs.gnu.org ([140.186.70.92]:51782) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Rldc7-00049k-7p for submit@debbugs.gnu.org; Fri, 13 Jan 2012 04:40:00 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RldbR-0007Qr-GE for submit@debbugs.gnu.org; Fri, 13 Jan 2012 04:39:23 -0500 Original-Received: from lists.gnu.org ([140.186.70.17]:49705) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RldbR-0007Qn-Ep for submit@debbugs.gnu.org; Fri, 13 Jan 2012 04:39:17 -0500 Original-Received: from eggs.gnu.org ([140.186.70.92]:44937) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RldbN-0004lE-CR for bug-gnu-emacs@gnu.org; Fri, 13 Jan 2012 04:39:17 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RldbM-0007QA-7g for bug-gnu-emacs@gnu.org; Fri, 13 Jan 2012 04:39:13 -0500 Original-Received: from lo.gmane.org ([80.91.229.12]:44955) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RldbL-0007Pg-Sy for bug-gnu-emacs@gnu.org; Fri, 13 Jan 2012 04:39:12 -0500 Original-Received: from list by lo.gmane.org with local (Exim 4.69) (envelope-from ) id 1RldbA-0002zD-2V for bug-gnu-emacs@gnu.org; Fri, 13 Jan 2012 10:39:00 +0100 Original-Received: from 121.77.197.77.rev.sfr.net ([77.197.77.121]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Fri, 13 Jan 2012 10:39:00 +0100 Original-Received: from thierry.volpiatto by 121.77.197.77.rev.sfr.net with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Fri, 13 Jan 2012 10:39:00 +0100 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 85 Original-X-Complaints-To: usenet@dough.gmane.org X-Gmane-NNTP-Posting-Host: 121.77.197.77.rev.sfr.net User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.92 (gnu/linux) Cancel-Lock: sha1:DWNfxmXFkwFaenc5YdxQCkw26z0= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:55673 Archived-At: --=-=-= Content-Type: text/plain Eli Zaretskii writes: > I don't think this will solves all the use cases. File names are not > strings, you cannot compare them as literal strings and hope to plumb > all the leaks. > > Some situations which I think this patch will not handle correctly: > > . file names with different letter-case on a case-insensitive file > system > > . relative vs absolute file names > > . file names that are hard links to the same directory (this includes > the infamous 8+3 short aliases on Windows) > > I didn't actually try the patch, so apologies if I missed something > which makes these non-issues. > Here a version of the patch that use `equal' and handle also same error on remotes files. i.e (copy-directory "/sudo:host:/home/user/Test" "/home/user/Test") -- Thierry Get my Gnupg key: gpg --keyserver pgp.mit.edu --recv-keys 59F29997 --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=Singlepatch-r118414ToTip.patch ##Merge of all patches applied from revision 118413 ## patch-r118414: Fix error when trying to copy directory on itself (bug#10489). ## patch-r118415: * lisp/dired-aux.el (dired-copy-file-recursive): Handle also remote file/dir. ## diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el --- a/lisp/dired-aux.el +++ b/lisp/dired-aux.el @@ -1264,6 +1264,11 @@ (defun dired-copy-file-recursive (from to ok-flag &optional preserve-time top recursive) + (when (equal (or (file-remote-p (file-name-as-directory from) 'localname) + (file-name-as-directory from)) + (or (file-remote-p (file-name-as-directory to) 'localname) + (file-name-as-directory to))) + (error "Can't copy directory `%s' on itself" from)) (let ((attrs (file-attributes from))) (if (and recursive (eq t (car attrs)) @@ -1431,7 +1436,12 @@ (marker-char (dired-file-marker from)) ; slow (t nil)))) (when (and (file-directory-p from) - (file-directory-p to) + (or (equal (or (file-remote-p (file-name-as-directory from) 'localname) + (file-name-as-directory from)) + (or (file-remote-p (file-name-as-directory to) 'localname) + (file-name-as-directory + (file-name-directory to)))) + (file-directory-p to)) (eq file-creator 'dired-copy-file)) (setq to (file-name-directory to))) (condition-case err diff --git a/lisp/files.el b/lisp/files.el --- a/lisp/files.el +++ b/lisp/files.el @@ -4928,6 +4928,11 @@ (format "Copy directory %s to: " dir) default-directory default-directory nil nil) current-prefix-arg t nil))) + (when (equal (or (file-remote-p (file-name-as-directory directory) 'localname) + (file-name-as-directory directory)) + (or (file-remote-p (file-name-as-directory newname) 'localname) + (file-name-as-directory newname))) + (error "Can't copy directory `%s' on itself" from)) ;; If default-directory is a remote directory, make sure we find its ;; copy-directory handler. (let ((handler (or (find-file-name-handler directory 'copy-directory) --=-=-=--