symbolic ref target validation: fixups Fixups requested in #3912.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
diff --git a/include/git2/common.h b/include/git2/common.h
index 02d2630..3304f46 100644
--- a/include/git2/common.h
+++ b/include/git2/common.h
@@ -157,7 +157,7 @@ typedef enum {
GIT_OPT_SET_SSL_CERT_LOCATIONS,
GIT_OPT_SET_USER_AGENT,
GIT_OPT_ENABLE_STRICT_OBJECT_CREATION,
- GIT_OPT_ENABLE_SYMBOLIC_REF_TARGET_VALIDATION,
+ GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION,
GIT_OPT_SET_SSL_CIPHERS,
GIT_OPT_GET_USER_AGENT,
} git_libgit2_opt_t;
@@ -272,16 +272,14 @@ typedef enum {
* > will be validated when creating a new commit. This defaults
* > to disabled.
*
- * * opts(GIT_OPT_ENABLE_SYMBOLIC_REF_TARGET_VALIDATION, int enabled)
+ * * opts(GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION, int enabled)
*
- * > Validate the target of a symbolic ref when creating it.
- * > For example, 'foobar' is not a valid ref,
- * > therefore 'foobar' is not a valid target
- * > for a symbolic ref by default,
- * > where as 'refs/heads/foobar' is.
- * > Disabling this bypasses validation so that an arbitrary
- * > strings such as 'foobar' can be used for a symbolic ref target.
- * > This defaults to enabled.
+ * > Validate the target of a symbolic ref when creating it. For
+ * > example, `foobar` is not a valid ref, therefore `foobar` is
+ * > not a valid target for a symbolic ref by default, whereas
+ * > `refs/heads/foobar` is. Disabling this bypasses validation
+ * > so that an arbitrary strings such as `foobar` can be used
+ * > for a symbolic ref target. This defaults to enabled.
*
* * opts(GIT_OPT_SET_SSL_CIPHERS, const char *ciphers)
*
diff --git a/src/refs.c b/src/refs.c
index c77653d..da6add0 100644
--- a/src/refs.c
+++ b/src/refs.c
@@ -177,7 +177,7 @@ int git_reference_name_to_id(
return 0;
}
-static int reference__normalize_for_repo(
+static int reference_normalize_for_repo(
git_refname_t out,
git_repository *repo,
const char *name,
@@ -190,29 +190,12 @@ static int reference__normalize_for_repo(
precompose)
flags |= GIT_REF_FORMAT__PRECOMPOSE_UNICODE;
- if (!validate) {
- flags |= GIT_REF_VALIDATION_DISABLE;
- }
+ if (!validate)
+ flags |= GIT_REF_FORMAT__VALIDATION_DISABLE;
return git_reference_normalize_name(out, GIT_REFNAME_MAX, name, flags);
}
-static int reference_normalize_for_repo(
- git_refname_t out,
- git_repository *repo,
- const char *name)
-{
- return reference__normalize_for_repo(out, repo, name, true);
-}
-
-static int reference_normalize_for_repo_without_validation(
- git_refname_t out,
- git_repository *repo,
- const char *name)
-{
- return reference__normalize_for_repo(out, repo, name, false);
-}
-
int git_reference_lookup_resolved(
git_reference **ref_out,
git_repository *repo,
@@ -236,7 +219,7 @@ int git_reference_lookup_resolved(
scan_type = GIT_REF_SYMBOLIC;
- if ((error = reference_normalize_for_repo(scan_name, repo, name)) < 0)
+ if ((error = reference_normalize_for_repo(scan_name, repo, name, true)) < 0)
return error;
if ((error = git_repository_refdb__weakptr(&refdb, repo)) < 0)
@@ -406,7 +389,7 @@ static int reference__create(
if (ref_out)
*ref_out = NULL;
- error = reference_normalize_for_repo(normalized, repo, name);
+ error = reference_normalize_for_repo(normalized, repo, name, true);
if (error < 0)
return error;
@@ -427,11 +410,8 @@ static int reference__create(
} else {
git_refname_t normalized_target;
- if (git_reference__enable_symbolic_ref_target_validation) {
- error = reference_normalize_for_repo(normalized_target, repo, symbolic);
- } else {
- error = reference_normalize_for_repo_without_validation(normalized_target, repo, symbolic);
- }
+ error = reference_normalize_for_repo(normalized_target, repo,
+ symbolic, git_reference__enable_symbolic_ref_target_validation);
if (error < 0)
return error;
@@ -612,7 +592,7 @@ static int reference__rename(git_reference **out, git_reference *ref, const char
assert(ref && new_name && signature);
if ((error = reference_normalize_for_repo(
- normalized, git_reference_owner(ref), new_name)) < 0)
+ normalized, git_reference_owner(ref), new_name, true)) < 0)
return error;
@@ -905,7 +885,7 @@ int git_reference__normalize_name(
int segment_len, segments_count = 0, error = GIT_EINVALIDSPEC;
unsigned int process_flags;
bool normalize = (buf != NULL);
- bool validate = (flags & GIT_REF_VALIDATION_DISABLE) == 0;
+ bool validate = (flags & GIT_REF_FORMAT__VALIDATION_DISABLE) == 0;
#ifdef GIT_USE_ICONV
git_path_iconv_t ic = GIT_PATH_ICONV_INIT;
diff --git a/src/refs.h b/src/refs.h
index c4786dd..80e655a 100644
--- a/src/refs.h
+++ b/src/refs.h
@@ -55,7 +55,7 @@ extern bool git_reference__enable_symbolic_ref_target_validation;
#define GIT_REFS_STASH_FILE GIT_REFS_DIR GIT_STASH_FILE
#define GIT_REF_FORMAT__PRECOMPOSE_UNICODE (1u << 16)
-#define GIT_REF_VALIDATION_DISABLE (1u << 15)
+#define GIT_REF_FORMAT__VALIDATION_DISABLE (1u << 15)
#define GIT_REFNAME_MAX 1024
diff --git a/src/settings.c b/src/settings.c
index 1fcdce2..bf0477b 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -192,7 +192,7 @@ int git_libgit2_opts(int key, ...)
git_object__strict_input_validation = (va_arg(ap, int) != 0);
break;
- case GIT_OPT_ENABLE_SYMBOLIC_REF_TARGET_VALIDATION:
+ case GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION:
git_reference__enable_symbolic_ref_target_validation = (va_arg(ap, int) != 0);
break;