diff options
-rw-r--r-- | source3/smbd/reply.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index c0d5234f47..1ff969493e 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -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). */ |