Fix assumption about following directory sep in check_path_syntax(). We
authorJeremy Allison <jra@samba.org>
Mon, 8 Mar 2004 21:54:56 +0000 (21:54 +0000)
committerJeremy Allison <jra@samba.org>
Mon, 8 Mar 2004 21:54:56 +0000 (21:54 +0000)
need to try and convert 1 byte, then 2 bytes if that fails. Fixes bug
reported by Simo.
Jeremy.
(This used to be commit 0f84801ff3ed5acfcf8e0c4a825f90b9b4823da5)

source3/smbd/reply.c

index c0d5234f472e721f7073b3add26606877ffe0001..1ff969493edbe2f0fa0853dc8e97a8ea11359ada 100644 (file)
@@ -114,14 +114,20 @@ static NTSTATUS check_path_syntax(pstring destname, const pstring srcname)
                                /* 
                                 * Potential mb char with second char a directory separator.
                                 * All the encodings we care about are 2 byte only, so do a
-                                * conversion to unicode. If the 2 byte char won't convert then
-                                * it's probably a one byte char with a real directory separator
-                                * following, so only copy one byte. If it will convert then
-                                * copy both bytes.
+                                * conversion to unicode. If the one byte char converts then
+                                * it really is a directory separator following. Otherwise if
+                                * the two byte character converts (and it should or our assumption
+                                * about character sets is broken and we panic) then copy both
+                                * bytes as it's a MB character, not a directory separator.
                                 */
+
                                uint16 ucs2_val;
-                               if (convert_string(CH_UNIX, CH_UCS2, s, 2, &ucs2_val, 2) == 2) {
+                               if (convert_string(CH_UNIX, CH_UCS2, s, 1, &ucs2_val, 2) == 2) {
+                                       ;
+                               } else if (convert_string(CH_UNIX, CH_UCS2, s, 2, &ucs2_val, 2) == 2) {
                                        *d++ = *s++;
+                               } else {
+                                       smb_panic("check_path_syntax: directory separator assumptions invalid !\n");
                                }
                        }
                        /* Just copy the char (or the second byte of the mb char). */