Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2023-01-23 16:01:43 +0300
committerCorinna Vinschen <corinna@vinschen.de>2023-01-23 16:03:25 +0300
commit62bc6bee3bdbb79404ce52860b25f06750ca83ba (patch)
tree0342c09cdea1d0403bbf2f4b451c90db83dce382
parent33e4340d44a8a316d548de6344ee6d1aa6c5fb7f (diff)
Cygwin: mount: differ allowed server name chars from allowed share name chars
The list of invalid chars for server names differs from the list of invalid chars for share names. Apart from that, we don't allow control chars in both kinds of names. Fixes: 6338d2f24a60 ("Cygwin: mount: allow any valid character in UNC paths") Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
-rw-r--r--winsup/cygwin/mount.cc19
1 files changed, 16 insertions, 3 deletions
diff --git a/winsup/cygwin/mount.cc b/winsup/cygwin/mount.cc
index 61e4c5d33..14c1ac729 100644
--- a/winsup/cygwin/mount.cc
+++ b/winsup/cygwin/mount.cc
@@ -51,10 +51,23 @@ int NO_COPY mount_info::root_idx = -1;
This function is only used to test for valid input strings.
The later normalization drops the native prefixes. */
+/* list of invalid chars in server names. Note that underscore is ok,
+ but it cripples interoperability. */
+const char _invalid_server_char[] = ",~:!@#$%^&'.(){} ";
+#define valid_server_char(_c) ({ \
+ const char __c = (_c); \
+ !iscntrl(__c) \
+ && strchr (_invalid_server_char, (_c)) == NULL; \
+ })
+
/* list of invalid chars in UNC filenames. These are a few more than
for "normal" filenames. */
-const char _invalid_char[] = "\"/\\[]:|<>+=;,?*";
-#define valid_share_char(_c) (strchr (_invalid_char, (_c)) == NULL)
+const char _invalid_share_char[] = "\"/\\[]:|<>+=;,?*";
+#define valid_share_char(_c) ({ \
+ const char __c = (_c); \
+ !iscntrl(__c) \
+ && strchr (_invalid_share_char, __c) == NULL; \
+ })
static inline bool
is_native_path (const char *path)
@@ -72,7 +85,7 @@ is_unc_share (const char *path)
const char *p;
return (isdirsep (path[0])
&& isdirsep (path[1])
- && valid_share_char (path[2])
+ && valid_server_char (path[2])
&& ((p = strpbrk (path + 3, "\\/")) != NULL)
&& valid_share_char (p[1]));
}