ctdb-tests: Fix some incorrect memory allocations
authorMartin Schwenke <martin@meltin.net>
Tue, 1 Dec 2015 04:32:07 +0000 (15:32 +1100)
committerMichael Adam <obnox@samba.org>
Tue, 12 Jan 2016 21:19:16 +0000 (22:19 +0100)
These allocate enough memory but things get confusing if they're used
as a guide when updating the code.

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Michael Adam <obnox@samba.org>
Autobuild-User(master): Michael Adam <obnox@samba.org>
Autobuild-Date(master): Tue Jan 12 22:19:16 CET 2016 on sn-devel-144

ctdb/tests/src/ctdb_takeover_tests.c

index 6797de467fd205fda0b4ad11f0bf2a9ea9864869..bbd004e685915c0ee0cf947134c415b6b50e931c 100644 (file)
@@ -196,7 +196,12 @@ read_ctdb_public_ip_info(TALLOC_CTX *ctx  ,
                while (t != NULL) {
                        n = (int) strtol(t, (char **) NULL, 10);
                        if ((*known)[n] == NULL) {
-                               (*known)[n] = talloc_array(ctx, struct ctdb_public_ip_list_old, CTDB_TEST_MAX_IPS);
+                               /* Array size here has to be
+                                * CTDB_TEST_MAX_IPS because total
+                                * number of IPs isn't yet known */
+                               (*known)[n] = talloc_size(ctx,
+                                                         offsetof(struct ctdb_public_ip_list_old, ips) +
+                                                         CTDB_TEST_MAX_IPS * sizeof(struct ctdb_public_ip));
                                (*known)[n]->num = 0;
                        }
                        curr = (*known)[n]->num;
@@ -210,7 +215,9 @@ read_ctdb_public_ip_info(TALLOC_CTX *ctx  ,
        }
 
        /* Build list of all allowed IPs */
-       a = talloc_array(ctx, struct ctdb_public_ip_list_old, CTDB_TEST_MAX_IPS);
+       a = talloc_size(ctx,
+                       offsetof(struct ctdb_public_ip_list_old, ips) +
+                       numips * sizeof(struct ctdb_public_ip));
        a->num = numips;
        for (ta = *all_ips, i=0; ta != NULL && i < numips ; ta = ta->next, i++) {
                a->ips[i].pnn = ta->pnn;