refname_is_safe(): use skip_prefix()

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
This commit is contained in:
Michael Haggerty 2016-04-27 12:39:11 +02:00
parent 728af2832c
commit 39950fef8b

8
refs.c
View file

@ -120,17 +120,19 @@ int check_refname_format(const char *refname, int flags)
int refname_is_safe(const char *refname)
{
if (starts_with(refname, "refs/")) {
const char *rest;
if (skip_prefix(refname, "refs/", &rest)) {
char *buf;
int result;
buf = xmallocz(strlen(refname));
/*
* 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/"));
buf = xmallocz(strlen(rest));
result = !normalize_path_copy(buf, rest);
free(buf);
return result;
}