]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-settings: Do proper alignment for dynamically added structs.
authorTimo Sirainen <tss@iki.fi>
Fri, 16 Jul 2010 14:08:46 +0000 (15:08 +0100)
committerTimo Sirainen <tss@iki.fi>
Fri, 16 Jul 2010 14:08:46 +0000 (15:08 +0100)
Fixes a crash with some CPUs.

src/lib-settings/settings-parser.c

index 6049780694610398ad5d5d82e09480978746a773..5f43a219fd8734cd6aa17bcd0794f96ceb28ad82 100644 (file)
@@ -1464,7 +1464,7 @@ info_update_real(pool_t pool, struct setting_parser_info *parent,
        /* add existing defines */
        for (j = 0; parent->defines[j].key != NULL; j++)
                array_append(&defines, &parent->defines[j], 1);
-       new_struct_size = parent->struct_size;
+       new_struct_size = MEM_ALIGN(parent->struct_size);
 
        /* add new dynamic defines */
        for (i = 0; parsers[i].name != NULL; i++) {
@@ -1486,7 +1486,7 @@ info_update_real(pool_t pool, struct setting_parser_info *parent,
        /* update defaults */
        parent_defaults = p_malloc(pool, new_struct_size);
        memcpy(parent_defaults, parent->defaults, parent->struct_size);
-       offset = parent->struct_size;
+       offset = MEM_ALIGN(parent->struct_size);
        for (i = 0; parsers[i].name != NULL; i++) {
                memcpy(PTR_OFFSET(parent_defaults, offset),
                       parsers[i].info->defaults, parsers[i].info->struct_size);
@@ -1502,7 +1502,7 @@ info_update_real(pool_t pool, struct setting_parser_info *parent,
                                     &parent->dynamic_parsers[i], 1);
                }
        }
-       offset = parent->struct_size;
+       offset = MEM_ALIGN(parent->struct_size);
        for (i = 0; parsers[i].name != NULL; i++) {
                new_parser = parsers[i];
                new_parser.name = p_strdup(pool, new_parser.name);