In preparation for switching the implementation of expand_macros away from a static buffer, return an allocated buffer and update all callers to release it.
Signed-off-by: John Keeping <j...@keeping.me.uk> --- cgit.c | 33 +++++++++++++++++++++++---------- shared.c | 5 ++--- ui-shared.c | 9 ++++++--- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/cgit.c b/cgit.c index bd9cb3f..ca1bc15 100644 --- a/cgit.c +++ b/cgit.c @@ -190,7 +190,7 @@ static void config_cb(const char *name, const char *value) else if (!strcmp(name, "cache-size")) ctx.cfg.cache_size = atoi(value); else if (!strcmp(name, "cache-root")) - ctx.cfg.cache_root = xstrdup(expand_macros(value)); + ctx.cfg.cache_root = expand_macros(value); else if (!strcmp(name, "cache-root-ttl")) ctx.cfg.cache_root_ttl = atoi(value); else if (!strcmp(name, "cache-repo-ttl")) @@ -232,16 +232,20 @@ static void config_cb(const char *name, const char *value) else if (!strcmp(name, "max-commit-count")) ctx.cfg.max_commit_count = atoi(value); else if (!strcmp(name, "project-list")) - ctx.cfg.project_list = xstrdup(expand_macros(value)); - else if (!strcmp(name, "scan-path")) + ctx.cfg.project_list = expand_macros(value); + else if (!strcmp(name, "scan-path")) { + char *expanded = expand_macros(value); + if (!ctx.cfg.nocache && ctx.cfg.cache_size) - process_cached_repolist(expand_macros(value)); + process_cached_repolist(expanded); else if (ctx.cfg.project_list) - scan_projects(expand_macros(value), + scan_projects(expanded, ctx.cfg.project_list, repo_config); else - scan_tree(expand_macros(value), repo_config); - else if (!strcmp(name, "scan-hidden-path")) + scan_tree(expanded, repo_config); + + free(expanded); + } else if (!strcmp(name, "scan-hidden-path")) ctx.cfg.scan_hidden_path = atoi(value); else if (!strcmp(name, "section-from-path")) ctx.cfg.section_from_path = atoi(value); @@ -287,8 +291,12 @@ static void config_cb(const char *name, const char *value) ctx.cfg.branch_sort = 0; } else if (skip_prefix(name, "mimetype.", &arg)) add_mimetype(arg, value); - else if (!strcmp(name, "include")) - parse_configfile(expand_macros(value), config_cb); + else if (!strcmp(name, "include")) { + char *expanded = expand_macros(value); + + parse_configfile(expanded, config_cb); + free(expanded); + } } static void querystring_cb(const char *name, const char *value) @@ -1041,6 +1049,7 @@ static int calc_ttl(void) int cmd_main(int argc, const char **argv) { const char *path; + char *expanded; int err, ttl; cgit_init_filters(); @@ -1052,7 +1061,11 @@ int cmd_main(int argc, const char **argv) cgit_repolist.repos = NULL; cgit_parse_args(argc, argv); - parse_configfile(expand_macros(ctx.env.cgit_config), config_cb); + + expanded = expand_macros(ctx.env.cgit_config); + parse_configfile(expanded, config_cb); + free(expanded); + ctx.repo = NULL; http_parse_querystring(ctx.qry.raw, querystring_cb); diff --git a/shared.c b/shared.c index 21ac8f4..32d0f46 100644 --- a/shared.c +++ b/shared.c @@ -489,8 +489,7 @@ static char *expand_macro(char *name, int maxlength) /* Replace all tokens prefixed by '$' in the specified text with the * value of the named environment variable. - * NB: the return value is a static buffer, i.e. it must be strdup'd - * by the caller. + * NB: the return value is allocated, it must be freed by the caller. */ char *expand_macros(const char *txt) { @@ -530,7 +529,7 @@ char *expand_macros(const char *txt) p = expand_macro(start, len); *p = '\0'; } - return result; + return xstrdup(result); } char *get_mimetype_for_filename(const char *filename) diff --git a/ui-shared.c b/ui-shared.c index 9d8f66b..c48f422 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -838,9 +838,12 @@ static void add_clone_urls(void (*fn)(const char *), char *txt, char *suffix) void cgit_add_clone_urls(void (*fn)(const char *)) { - if (ctx.repo->clone_url) - add_clone_urls(fn, expand_macros(ctx.repo->clone_url), NULL); - else if (ctx.cfg.clone_prefix) + if (ctx.repo->clone_url) { + char *expanded = expand_macros(ctx.repo->clone_url); + + add_clone_urls(fn, expanded, NULL); + free(expanded); + } else if (ctx.cfg.clone_prefix) add_clone_urls(fn, ctx.cfg.clone_prefix, ctx.repo->url); } -- 2.17.1 _______________________________________________ CGit mailing list CGit@lists.zx2c4.com https://lists.zx2c4.com/mailman/listinfo/cgit