Skip to content

Commit

Permalink
real_path_if_valid(): remove unsafe API
Browse files Browse the repository at this point in the history
This commit continues the work started with previous commit.

Signed-off-by: Alexandr Miloslavskiy <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
SyntevoAlex authored and gitster committed Mar 10, 2020
1 parent 3d7747e commit 4530a85
Show file tree
Hide file tree
Showing 6 changed files with 14 additions and 26 deletions.
10 changes: 0 additions & 10 deletions abspath.c
Original file line number Diff line number Diff line change
Expand Up @@ -202,16 +202,6 @@ char *strbuf_realpath(struct strbuf *resolved, const char *path,
return retval;
}

/*
* Resolve `path` into an absolute, cleaned-up path. The return value
* comes from a shared buffer.
*/
const char *real_path_if_valid(const char *path)
{
static struct strbuf realpath = STRBUF_INIT;
return strbuf_realpath(&realpath, path, 0);
}

char *real_pathdup(const char *path, int die_on_error)
{
struct strbuf realpath = STRBUF_INIT;
Expand Down
1 change: 0 additions & 1 deletion cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -1314,7 +1314,6 @@ static inline int is_absolute_path(const char *path)
int is_directory(const char *);
char *strbuf_realpath(struct strbuf *resolved, const char *path,
int die_on_error);
const char *real_path_if_valid(const char *path);
char *real_pathdup(const char *path, int die_on_error);
const char *absolute_path(const char *path);
char *absolute_pathdup(const char *path);
Expand Down
2 changes: 1 addition & 1 deletion setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -886,7 +886,7 @@ static dev_t get_device_or_die(const char *path, const char *prefix, int prefix_

/*
* A "string_list_each_func_t" function that canonicalizes an entry
* from GIT_CEILING_DIRECTORIES using real_path_if_valid(), or
* from GIT_CEILING_DIRECTORIES using real_pathdup(), or
* discards it if unusable. The presence of an empty entry in
* GIT_CEILING_DIRECTORIES turns off canonicalization for all
* subsequent entries.
Expand Down
13 changes: 4 additions & 9 deletions sha1-file.c
Original file line number Diff line number Diff line change
Expand Up @@ -676,20 +676,15 @@ void add_to_alternates_memory(const char *reference)
char *compute_alternate_path(const char *path, struct strbuf *err)
{
char *ref_git = NULL;
const char *repo, *ref_git_s;
const char *repo;
int seen_error = 0;

ref_git_s = real_path_if_valid(path);
if (!ref_git_s) {
ref_git = real_pathdup(path, 0);
if (!ref_git) {
seen_error = 1;
strbuf_addf(err, _("path '%s' does not exist"), path);
goto out;
} else
/*
* Beware: read_gitfile(), real_path() and mkpath()
* return static buffer
*/
ref_git = xstrdup(ref_git_s);
}

repo = read_gitfile(ref_git);
if (!repo)
Expand Down
7 changes: 4 additions & 3 deletions submodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -2173,7 +2173,7 @@ const char *get_superproject_working_tree(void)
static struct strbuf realpath = STRBUF_INIT;
struct child_process cp = CHILD_PROCESS_INIT;
struct strbuf sb = STRBUF_INIT;
const char *one_up = real_path_if_valid("../");
struct strbuf one_up = STRBUF_INIT;
const char *cwd = xgetcwd();
const char *ret = NULL;
const char *subpath;
Expand All @@ -2188,10 +2188,11 @@ const char *get_superproject_working_tree(void)
*/
return NULL;

if (!one_up)
if (!strbuf_realpath(&one_up, "../", 0))
return NULL;

subpath = relative_path(cwd, one_up, &sb);
subpath = relative_path(cwd, one_up.buf, &sb);
strbuf_release(&one_up);

prepare_submodule_repo_env(&cp.env_array);
argv_array_pop(&cp.env_array);
Expand Down
7 changes: 5 additions & 2 deletions worktree.c
Original file line number Diff line number Diff line change
Expand Up @@ -226,17 +226,20 @@ struct worktree *find_worktree(struct worktree **list,

struct worktree *find_worktree_by_path(struct worktree **list, const char *p)
{
struct strbuf wt_path = STRBUF_INIT;
char *path = real_pathdup(p, 0);

if (!path)
return NULL;
for (; *list; list++) {
const char *wt_path = real_path_if_valid((*list)->path);
if (!strbuf_realpath(&wt_path, (*list)->path, 0))
continue;

if (wt_path && !fspathcmp(path, wt_path))
if (!fspathcmp(path, wt_path.buf))
break;
}
free(path);
strbuf_release(&wt_path);
return *list;
}

Expand Down

0 comments on commit 4530a85

Please sign in to comment.