]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
ldb:dn_compare_base: avoid unlikely int overflow
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Thu, 22 Aug 2024 22:14:04 +0000 (10:14 +1200)
committerDouglas Bagnall <dbagnall@samba.org>
Thu, 19 Dec 2024 23:00:32 +0000 (23:00 +0000)
Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andreas Schneider <asn@samba.org>
lib/ldb/common/ldb_dn.c

index 16de79db5523ad178fd3067fa812de2e15dcd425..0af0d94826a9b5dcc627b399b565945ed88d0890 100644 (file)
@@ -1062,13 +1062,15 @@ int ldb_dn_compare_base(struct ldb_dn *base, struct ldb_dn *dn)
                if (base->linearized && dn->linearized && dn->special == base->special) {
                        /* try with a normal compare first, if we are lucky
                         * we will avoid exploding and casefolding */
-                       int dif;
-                       dif = strlen(dn->linearized) - strlen(base->linearized);
-                       if (dif < 0) {
-                               return dif;
+                       size_t len_dn = strlen(dn->linearized);
+                       size_t len_base = strlen(base->linearized);
+
+                       if (len_dn < len_base) {
+                               return -1;
                        }
+
                        if (strcmp(base->linearized,
-                                  &dn->linearized[dif]) == 0) {
+                                  &dn->linearized[len_dn - len_base]) == 0) {
                                return 0;
                        }
                }