mirror of
https://git.proxmox.com/git/libgit2
synced 2025-06-19 18:54:04 +00:00
parent
452bf57cbe
commit
28d0ba0ba5
@ -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)
|
||||
*
|
||||
|
38
src/refs.c
38
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;
|
||||
|
@ -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
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user