]> git.ipfire.org Git - thirdparty/git.git/blobdiff - config.c
The sixth batch
[thirdparty/git.git] / config.c
index ae3652b08fa6f36af6c085e36b89efdd46d72389..d57996240bb318a9548bc7342759e20d73fa6910 100644 (file)
--- a/config.c
+++ b/config.c
@@ -303,7 +303,8 @@ static int include_by_branch(const char *cond, size_t cond_len)
        int ret;
        struct strbuf pattern = STRBUF_INIT;
        const char *refname = !the_repository->gitdir ?
-               NULL : resolve_ref_unsafe("HEAD", 0, NULL, &flags);
+               NULL : refs_resolve_ref_unsafe(get_main_ref_store(the_repository),
+                                              "HEAD", 0, NULL, &flags);
        const char *shortname;
 
        if (!refname || !(flags & REF_ISSYMREF) ||
@@ -1416,8 +1417,19 @@ static int git_default_core_config(const char *var, const char *value,
        if (!strcmp(var, "core.attributesfile"))
                return git_config_pathname(&git_attributes_file, var, value);
 
-       if (!strcmp(var, "core.hookspath"))
+       if (!strcmp(var, "core.hookspath")) {
+               if (ctx->kvi && ctx->kvi->scope == CONFIG_SCOPE_LOCAL &&
+                   git_env_bool("GIT_CLONE_PROTECTION_ACTIVE", 0))
+                       die(_("active `core.hooksPath` found in the local "
+                             "repository config:\n\t%s\nFor security "
+                             "reasons, this is disallowed by default.\nIf "
+                             "this is intentional and the hook should "
+                             "actually be run, please\nrun the command "
+                             "again with "
+                             "`GIT_CLONE_PROTECTION_ACTIVE=false`"),
+                           value);
                return git_config_pathname(&git_hooks_path, var, value);
+       }
 
        if (!strcmp(var, "core.bare")) {
                is_bare_repository_cfg = git_config_bool(var, value);
@@ -3182,14 +3194,10 @@ void git_config_set(const char *key, const char *value)
        trace2_cmd_set_config(key, value);
 }
 
-/*
- * The ownership rule is that the caller will own the string
- * if it receives a piece of memory different from what it passed
- * as the parameter.
- */
-const char *git_config_prepare_comment_string(const char *comment)
+char *git_config_prepare_comment_string(const char *comment)
 {
        size_t leading_blanks;
+       char *prepared;
 
        if (!comment)
                return NULL;
@@ -3210,13 +3218,13 @@ const char *git_config_prepare_comment_string(const char *comment)
 
        leading_blanks = strspn(comment, " \t");
        if (leading_blanks && comment[leading_blanks] == '#')
-               ; /* use it as-is */
+               prepared = xstrdup(comment); /* use it as-is */
        else if (comment[0] == '#')
-               comment = xstrfmt(" %s", comment);
+               prepared = xstrfmt(" %s", comment);
        else
-               comment = xstrfmt(" # %s", comment);
+               prepared = xstrfmt(" # %s", comment);
 
-       return comment;
+       return prepared;
 }
 
 static void validate_comment_string(const char *comment)