Author: abartlet
Date: 2006-09-28 17:06:38 +0000 (Thu, 28 Sep 2006)
New Revision: 18978

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=18978

Log:
Fix bug found by:
http://www.ee.oulu.fi/research/ouspg/protos/testing/c06/ldapv3/

The issue here is that if the UTF8 conversion fails, because this
isn't actually UTF8 data, then we need to do a binary compare instead.

Andrew Bartlett


Modified:
   branches/SAMBA_4_0/source/lib/ldb/common/attrib_handlers.c


Changeset:
Modified: branches/SAMBA_4_0/source/lib/ldb/common/attrib_handlers.c
===================================================================
--- branches/SAMBA_4_0/source/lib/ldb/common/attrib_handlers.c  2006-09-28 
16:58:28 UTC (rev 18977)
+++ branches/SAMBA_4_0/source/lib/ldb/common/attrib_handlers.c  2006-09-28 
17:06:38 UTC (rev 18978)
@@ -184,10 +184,19 @@
        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 @@
                while (*u2 == ' ') u2++;
        }
        ret = (int)(*u1 - *u2);
+
        talloc_free(b1);
        talloc_free(b2);
-
+       
        return ret;
 }
 

Reply via email to