diff options
author | Stefan Metzmacher <metze@samba.org> | 2006-10-09 07:15:27 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:15:20 -0500 |
commit | d63a3e05a23ffb016578c3daa8b48d6fc32e1e8c (patch) | |
tree | 60ff3225bd32711951cbb5e80727060f0bc8f87c | |
parent | 617c39ab5ffbefcd7d0536c72ffbb0c36ce04215 (diff) | |
download | samba-d63a3e05a23ffb016578c3daa8b48d6fc32e1e8c.tar.gz samba-d63a3e05a23ffb016578c3daa8b48d6fc32e1e8c.tar.bz2 samba-d63a3e05a23ffb016578c3daa8b48d6fc32e1e8c.zip |
r19183: merge from samba4:
don't crash on invalid utf8 chars
metze
(This used to be commit 71e1f8550f96eaaae7e4fc4d02eb36f1d894abc8)
-rw-r--r-- | source3/lib/ldb/common/attrib_handlers.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/source3/lib/ldb/common/attrib_handlers.c b/source3/lib/ldb/common/attrib_handlers.c index c4c83c52a6..07a0ec6eb8 100644 --- a/source3/lib/ldb/common/attrib_handlers.c +++ b/source3/lib/ldb/common/attrib_handlers.c @@ -184,10 +184,19 @@ static int ldb_comparison_fold(struct ldb_context *ldb, void *mem_ctx, return (int)(toupper(*s1)) - (int)(toupper(*s2)); utf8str: - /* non need to recheck from the start, just from the first utf8 char found */ + /* no need to recheck from the start, just from the first utf8 char found */ b1 = u1 = ldb_casefold(ldb, mem_ctx, s1); b2 = u2 = ldb_casefold(ldb, mem_ctx, s2); - + + if (u1 && u2) { + /* Both strings converted correctly */ + } else { + /* One of the strings was not UTF8, so we have no options but to do a binary compare */ + + u1 = s1; + u2 = s2; + } + while (*u1 & *u2) { if (*u1 != *u2) break; @@ -202,9 +211,10 @@ utf8str: while (*u2 == ' ') u2++; } ret = (int)(*u1 - *u2); + talloc_free(b1); talloc_free(b2); - + return ret; } |