Browse Source

real_path_if_valid(): remove unsafe API

This commit continues the work started with previous commit.

Signed-off-by: Alexandr Miloslavskiy <alexandr.miloslavskiy@syntevo.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Alexandr Miloslavskiy 5 years ago committed by Junio C Hamano
parent
commit
4530a85b4c
  1. 10
      abspath.c
  2. 1
      cache.h
  3. 2
      setup.c
  4. 13
      sha1-file.c
  5. 7
      submodule.c
  6. 7
      worktree.c

10
abspath.c

@ -202,16 +202,6 @@ error_out: @@ -202,16 +202,6 @@ error_out:
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;

1
cache.h

@ -1314,7 +1314,6 @@ static inline int is_absolute_path(const char *path) @@ -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);

2
setup.c

@ -886,7 +886,7 @@ static dev_t get_device_or_die(const char *path, const char *prefix, int prefix_ @@ -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.

13
sha1-file.c

@ -676,20 +676,15 @@ void add_to_alternates_memory(const char *reference) @@ -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)

7
submodule.c

@ -2173,7 +2173,7 @@ const char *get_superproject_working_tree(void) @@ -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;
@ -2188,10 +2188,11 @@ const char *get_superproject_working_tree(void) @@ -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);

7
worktree.c

@ -226,17 +226,20 @@ struct worktree *find_worktree(struct worktree **list, @@ -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;
}


Loading…
Cancel
Save