summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/lib/charcnv.c3
-rw-r--r--source3/smbd/reply.c30
2 files changed, 20 insertions, 13 deletions
diff --git a/source3/lib/charcnv.c b/source3/lib/charcnv.c
index ad15788b84..f6028bb134 100644
--- a/source3/lib/charcnv.c
+++ b/source3/lib/charcnv.c
@@ -1307,6 +1307,7 @@ size_t next_mb_char_size(const char *s)
if (!(*s & 0x80))
return 1; /* ascii. */
+ conv_silent = True;
for ( i = 1; i <=4; i++ ) {
smb_ucs2_t uc;
if (convert_string(CH_UNIX, CH_UCS2, s, i, &uc, 2, False) == 2) {
@@ -1314,10 +1315,12 @@ size_t next_mb_char_size(const char *s)
DEBUG(10,("next_mb_char_size: size %u at string %s\n",
(unsigned int)i, s));
#endif
+ conv_silent = False;
return i;
}
}
/* We're hosed - we don't know how big this is... */
DEBUG(10,("next_mb_char_size: unknown size at string %s\n", s));
+ conv_silent = False;
return 1;
}
diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c
index 0fe73cddc2..f5c4f25e40 100644
--- a/source3/smbd/reply.c
+++ b/source3/smbd/reply.c
@@ -113,19 +113,23 @@ NTSTATUS check_path_syntax(pstring destname, const pstring srcname)
}
s++;
} else {
- switch(next_mb_char_size(s)) {
- case 4:
- *d++ = *s++;
- case 3:
- *d++ = *s++;
- case 2:
- *d++ = *s++;
- case 1:
- *d++ = *s++;
- break;
- default:
- DEBUG(0,("check_path_syntax: character length assumptions invalid !\n"));
- return NT_STATUS_INVALID_PARAMETER;
+ if (!(*s & 0x80)) {
+ *d++ = *s++;
+ } else {
+ switch(next_mb_char_size(s)) {
+ case 4:
+ *d++ = *s++;
+ case 3:
+ *d++ = *s++;
+ case 2:
+ *d++ = *s++;
+ case 1:
+ *d++ = *s++;
+ break;
+ default:
+ DEBUG(0,("check_path_syntax: character length assumptions invalid !\n"));
+ return NT_STATUS_INVALID_PARAMETER;
+ }
}
}
}