This function does not contain any backend specific code so we move it to the common code. Signed-off-by: Ronnie Sahlberg <sahlberg@xxxxxxxxxx> Signed-off-by: David Turner <dturner@xxxxxxxxxxxxxxxx> --- refs-be-files.c | 33 --------------------------------- refs.c | 24 ++++++++++++++++++++++++ refs.h | 2 ++ 3 files changed, 26 insertions(+), 33 deletions(-) diff --git a/refs-be-files.c b/refs-be-files.c index 9548fb3..346429e 100644 --- a/refs-be-files.c +++ b/refs-be-files.c @@ -196,39 +196,6 @@ static struct ref_dir *get_ref_dir(struct ref_entry *entry) return dir; } -/* - * Check if a refname is safe. - * For refs that start with "refs/" we consider it safe as long they do - * not try to resolve to outside of refs/. - * - * For all other refs we only consider them safe iff they only contain - * upper case characters and '_' (like "HEAD" AND "MERGE_HEAD", and not like - * "config"). - */ -static int refname_is_safe(const char *refname) -{ - if (starts_with(refname, "refs/")) { - char *buf; - int result; - - buf = xmalloc(strlen(refname) + 1); - /* - * Does the refname try to escape refs/? - * For example: refs/foo/../bar is safe but refs/foo/../../bar - * is not. - */ - result = !normalize_path_copy(buf, refname + strlen("refs/")); - free(buf); - return result; - } - while (*refname) { - if (!isupper(*refname) && *refname != '_') - return 0; - refname++; - } - return 1; -} - static struct ref_entry *create_ref_entry(const char *refname, const unsigned char *sha1, int flag, int check_name) diff --git a/refs.c b/refs.c index e627d74..2515f6e 100644 --- a/refs.c +++ b/refs.c @@ -1009,6 +1009,30 @@ int ref_transaction_verify(struct ref_transaction *transaction, flags, NULL, err); } +int refname_is_safe(const char *refname) +{ + if (starts_with(refname, "refs/")) { + char *buf; + int result; + + buf = xmalloc(strlen(refname) + 1); + /* + * Does the refname try to escape refs/? + * For example: refs/foo/../bar is safe but refs/foo/../../bar + * is not. + */ + result = !normalize_path_copy(buf, refname + strlen("refs/")); + free(buf); + return result; + } + while (*refname) { + if (!isupper(*refname) && *refname != '_') + return 0; + refname++; + } + return 1; +} + /* backend functions */ int ref_transaction_commit(struct ref_transaction *transaction, struct strbuf *err) diff --git a/refs.h b/refs.h index e2ba725..fc8a748 100644 --- a/refs.h +++ b/refs.h @@ -415,6 +415,8 @@ extern int for_each_reflog(each_ref_fn, void *); */ extern int check_refname_format(const char *refname, int flags); +extern int refname_is_safe(const char *refname); + extern const char *prettify_refname(const char *refname); extern char *shorten_unambiguous_ref(const char *refname, int strict); -- 2.4.2.644.g97b850b-twtrsrc -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html