diff options
Diffstat (limited to 'source3/smbd')
-rw-r--r-- | source3/smbd/mangle_hash2.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/source3/smbd/mangle_hash2.c b/source3/smbd/mangle_hash2.c index 655c72745a..c2910f82c8 100644 --- a/source3/smbd/mangle_hash2.c +++ b/source3/smbd/mangle_hash2.c @@ -626,21 +626,17 @@ static bool is_legal_name(const char *name) while (*name) { if (((unsigned int)name[0]) > 128 && (name[1] != 0)) { /* Possible start of mb character. */ - char mbc[2]; size_t size = 0; + (void)next_codepoint(name, &size); /* - * Note that if CH_UNIX is utf8 a string may be 3 - * bytes, but this is ok as mb utf8 characters don't - * contain embedded ascii bytes. We are really checking - * for mb UNIX asian characters like Japanese (SJIS) here. - * JRA. + * Note that we're only looking for multibyte + * encoding here. No encoding with a length > 1 + * contains invalid characters. */ - if (convert_string(CH_UNIX, CH_UTF16LE, name, 2, mbc, 2, &size)) { - if (size == 2) { - /* Was a good mb string. */ - name += 2; - continue; - } + if (size > 1) { + /* Was a mb string. */ + name += size; + continue; } } |