From: Timo Sirainen Date: Fri, 16 Jul 2010 14:08:46 +0000 (+0100) Subject: lib-settings: Do proper alignment for dynamically added structs. X-Git-Tag: 2.0.rc3~35 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b8dd981d689ae41ab3fe46ebe8237dc5a3602a30;p=thirdparty%2Fdovecot%2Fcore.git lib-settings: Do proper alignment for dynamically added structs. Fixes a crash with some CPUs. --- diff --git a/src/lib-settings/settings-parser.c b/src/lib-settings/settings-parser.c index 6049780694..5f43a219fd 100644 --- a/src/lib-settings/settings-parser.c +++ b/src/lib-settings/settings-parser.c @@ -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);