newoptions->IncludeUsed = cf_has_include;
newoptions->FilesOpenedByIncludes = opened_files;
+ opened_files = NULL; // prevent double-free.
/* If this is a testing network configuration, change defaults
* for a list of dependent config options, and try this function again. */
goto err;
}
- newoptions->IncludeUsed = cf_has_include;
- newoptions->FilesOpenedByIncludes = opened_files;
- opened_files = NULL; // prevent double-free.
-
err = options_validate_and_set(oldoptions, newoptions, msg);
- if (err < 0)
+ if (err < 0) {
+ newoptions = NULL; // This was already freed in options_validate_and_set.
goto err;
+ }
or_options_free(global_default_options);
global_default_options = newdefaultoptions;
smartlist_free(opened_files);
}
or_options_free(newdefaultoptions);
+ or_options_free(newoptions);
if (*msg) {
char *old_msg = *msg;
tor_asprintf(msg, "Failed to parse/validate config: %s", old_msg);