]> git.eshelyaron.com Git - emacs.git/commitdiff
Handle empty strings in Tramp's expand-file-name implementations
authorMichael Albinus <michael.albinus@gmx.de>
Wed, 6 Mar 2019 11:06:09 +0000 (12:06 +0100)
committerMichael Albinus <michael.albinus@gmx.de>
Wed, 6 Mar 2019 11:06:09 +0000 (12:06 +0100)
* lisp/net/tramp.el (tramp-handle-expand-file-name):
* lisp/net/tramp-gvfs.el (tramp-gvfs-handle-expand-file-name):
* lisp/net/tramp-sh.el (tramp-sh-handle-expand-file-name):
* lisp/net/tramp-smb.el (tramp-smb-handle-expand-file-name):
* lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-expand-file-name):
Handle empty NAME.

* test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax)
(tramp-test01-file-name-syntax-simplified)
(tramp-test01-file-name-syntax-separate): Use neutral IPv4 address.
(tramp-test05-expand-file-name): Check also "." and "".

lisp/net/tramp-gvfs.el
lisp/net/tramp-sh.el
lisp/net/tramp-smb.el
lisp/net/tramp-sudoedit.el
lisp/net/tramp.el
test/lisp/net/tramp-tests.el

index 569fdb55615d288f3b0d28bb497a9ab7d91924c4..2d8f42004a800bbcf48ede5682afa25c63e810ca 100644 (file)
@@ -883,6 +883,8 @@ file names."
   "Like `expand-file-name' for Tramp files."
   ;; If DIR is not given, use DEFAULT-DIRECTORY or "/".
   (setq dir (or dir default-directory "/"))
+  ;; Handle empty NAME.
+  (when (zerop (length name)) (setq name "."))
   ;; Unless NAME is absolute, concat DIR and NAME.
   (unless (file-name-absolute-p name)
     (setq name (concat (file-name-as-directory dir) name)))
index 58c2fe5fd3f503200bbc6f17e2696e5d4d187830..ee16138f7006ea7066bd77ba5fedf8154eddc02f 100644 (file)
@@ -2716,6 +2716,8 @@ If the localname part of the given file name starts with \"/../\" then
 the result will be a local, non-Tramp, file name."
   ;; If DIR is not given, use `default-directory' or "/".
   (setq dir (or dir default-directory "/"))
+  ;; Handle empty NAME.
+  (when (zerop (length name)) (setq name "."))
   ;; Unless NAME is absolute, concat DIR and NAME.
   (unless (file-name-absolute-p name)
     (setq name (concat (file-name-as-directory dir) name)))
index 64a8fa22507f5da6447e20adb69aaeb65759381e..e6e2485ea0fe8cf2a28a0a10ab98c44d0be2bc6f 100644 (file)
@@ -692,6 +692,8 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
   "Like `expand-file-name' for Tramp files."
   ;; If DIR is not given, use DEFAULT-DIRECTORY or "/".
   (setq dir (or dir default-directory "/"))
+  ;; Handle empty NAME.
+  (when (zerop (length name)) (setq name "."))
   ;; Unless NAME is absolute, concat DIR and NAME.
   (unless (file-name-absolute-p name)
     (setq name (concat (file-name-as-directory dir) name)))
index 42deaf379757532d97d4aec5cbe090466a38197f..0d9e04d0bd16c209792de7ec6db9e36d5ce79ef6 100644 (file)
@@ -353,6 +353,8 @@ If the localname part of the given file name starts with \"/../\" then
 the result will be a local, non-Tramp, file name."
   ;; If DIR is not given, use `default-directory' or "/".
   (setq dir (or dir default-directory "/"))
+  ;; Handle empty NAME.
+  (when (zerop (length name)) (setq name "."))
   ;; Unless NAME is absolute, concat DIR and NAME.
   (unless (file-name-absolute-p name)
     (setq name (concat (file-name-as-directory dir) name)))
index b35b36eac7d5b5e1939ae130621b136dbcf1daea..97ec5e174b47b31f8c311523de2eb90cbb48e4b4 100644 (file)
@@ -3069,6 +3069,8 @@ User is always nil."
   "Like `expand-file-name' for Tramp files."
   ;; If DIR is not given, use DEFAULT-DIRECTORY or "/".
   (setq dir (or dir default-directory "/"))
+  ;; Handle empty NAME.
+  (when (zerop (length name)) (setq name "."))
   ;; Unless NAME is absolute, concat DIR and NAME.
   (unless (file-name-absolute-p name)
     (setq name (concat (file-name-as-directory dir) name)))
index f470385be9f0ce153022a33bcebe044c22516bb3..69d5ba8b7df4a44d5610007a14a27c0a80746278 100644 (file)
@@ -238,8 +238,8 @@ properly.  BODY shall not contain a timeout."
   (should (tramp-tramp-file-p "/method:user@[::1]:"))
 
   ;; Using an IPv4 mapped IPv6 address.
-  (should (tramp-tramp-file-p "/method:[::ffff:192.168.0.1]:"))
-  (should (tramp-tramp-file-p "/method:user@[::ffff:192.168.0.1]:"))
+  (should (tramp-tramp-file-p "/method:[::ffff:1.2.3.4]:"))
+  (should (tramp-tramp-file-p "/method:user@[::ffff:1.2.3.4]:"))
 
   ;; Local file name part.
   (should (tramp-tramp-file-p "/method:::"))
@@ -268,7 +268,7 @@ properly.  BODY shall not contain a timeout."
   (should-not (tramp-tramp-file-p "/1.2.3.4:"))
   (should-not (tramp-tramp-file-p "/[]:"))
   (should-not (tramp-tramp-file-p "/[::1]:"))
-  (should-not (tramp-tramp-file-p "/[::ffff:192.168.0.1]:"))
+  (should-not (tramp-tramp-file-p "/[::ffff:1.2.3.4]:"))
   (should-not (tramp-tramp-file-p "/host:/:"))
   (should-not (tramp-tramp-file-p "/host1|host2:"))
   (should-not (tramp-tramp-file-p "/user1@host1|user2@host2:"))
@@ -318,8 +318,8 @@ properly.  BODY shall not contain a timeout."
          (should (tramp-tramp-file-p "/user@[::1]:"))
 
          ;; Using an IPv4 mapped IPv6 address.
-         (should (tramp-tramp-file-p "/[::ffff:192.168.0.1]:"))
-         (should (tramp-tramp-file-p "/user@[::ffff:192.168.0.1]:"))
+         (should (tramp-tramp-file-p "/[::ffff:1.2.3.4]:"))
+         (should (tramp-tramp-file-p "/user@[::ffff:1.2.3.4]:"))
 
          ;; Local file name part.
          (should (tramp-tramp-file-p "/host::"))
@@ -372,8 +372,8 @@ properly.  BODY shall not contain a timeout."
          (should (tramp-tramp-file-p "/[method/user@::1]"))
 
          ;; Using an IPv4 mapped IPv6 address.
-         (should (tramp-tramp-file-p "/[method/::ffff:192.168.0.1]"))
-         (should (tramp-tramp-file-p "/[method/user@::ffff:192.168.0.1]"))
+         (should (tramp-tramp-file-p "/[method/::ffff:1.2.3.4]"))
+         (should (tramp-tramp-file-p "/[method/user@::ffff:1.2.3.4]"))
 
          ;; Local file name part.
          (should (tramp-tramp-file-p "/[method/]"))
@@ -1988,6 +1988,18 @@ properly.  BODY shall not contain a timeout."
   (should
    (string-equal
     (expand-file-name "/method:host:/path/../file") "/method:host:/file"))
+  (should
+   (string-equal
+    (expand-file-name "/method:host:/path/.") "/method:host:/path"))
+  (should
+   (string-equal
+    (expand-file-name "/method:host:/path/..") "/method:host:/"))
+  (should
+   (string-equal
+    (expand-file-name "." "/method:host:/path/") "/method:host:/path"))
+  (should
+   (string-equal
+    (expand-file-name "" "/method:host:/path/") "/method:host:/path"))
   ;; Quoting local part.
   (should
    (string-equal