]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
ldb: fix ldb_comparison_fold off-by-one overrun
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Sat, 6 Mar 2021 03:05:15 +0000 (16:05 +1300)
committerStefan Metzmacher <metze@samba.org>
Tue, 2 Nov 2021 21:52:16 +0000 (21:52 +0000)
We run one character over in comparing all the bytes in two ldb_vals.

In almost all circumstances both ldb_vals would have an allocated '\0'
in the overrun position, but it is best not to rely on that.

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
(cherry picked from commit 2b2f4f519454beb6f2a46705675a62274019fc09)

lib/ldb/common/attrib_handlers.c

index f0fd4f50d8dfd09bbd132a3a887b46eb182cac4f..6a885065f773673483fc508400a9fd959a131902 100644 (file)
@@ -334,8 +334,8 @@ int ldb_comparison_fold(struct ldb_context *ldb, void *mem_ctx,
                if (toupper((unsigned char)*s1) != toupper((unsigned char)*s2))
                        break;
                if (*s1 == ' ') {
-                       while (n1 && s1[0] == s1[1]) { s1++; n1--; }
-                       while (n2 && s2[0] == s2[1]) { s2++; n2--; }
+                       while (n1 > 1 && s1[0] == s1[1]) { s1++; n1--; }
+                       while (n2 > 1 && s2[0] == s2[1]) { s2++; n2--; }
                }
                s1++; s2++;
                n1--; n2--;