s4-ldb: cope with bad ptr alignment in ldb_index.c
authorAndrew Tridgell <tridge@samba.org>
Fri, 15 Jan 2010 21:58:27 +0000 (08:58 +1100)
committerAndrew Tridgell <tridge@samba.org>
Fri, 15 Jan 2010 22:34:27 +0000 (09:34 +1100)
We can't assume that a rec_ptr will come back from a tdb traverse with
alignment sufficient for a pointer.

source4/lib/ldb/ldb_tdb/ldb_index.c

index 01d0d6ce349f492c65b60739ba166796829582d8..4b31021001115e2f32f3e4518479eb0f8bdb119c 100644 (file)
@@ -103,12 +103,12 @@ static struct dn_list *ltdb_index_idxptr(struct ldb_module *module, TDB_DATA rec
                                       "Bad data size for idxptr %u", (unsigned)rec.dsize);
                return NULL;
        }
-       
-       list = talloc_get_type(*(struct dn_list **)rec.dptr, struct dn_list);
+       memcpy(&list, rec.dptr, sizeof(void *));
+       list = talloc_get_type(list, struct dn_list);
        if (list == NULL) {
                ldb_asprintf_errstring(ldb_module_get_ctx(module), 
                                       "Bad type '%s' for idxptr", 
-                                      talloc_get_name(*(struct dn_list **)rec.dptr));
+                                      talloc_get_name(list));
                return NULL;
        }
        if (check_parent && list->dn && talloc_parent(list->dn) != list) {