@matheusbsbs / matheus-bagliano / commits / 4530a85b4c
Fork 0

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>

Alexandr Miloslavskiy committed Mar 10, 2020 at 13:11 UTC 4530a85b4c34f009b5f190eb2dc8367801de5028
6 files changed +14 -26
abspath.c
-10
@@ -202,16 +202,6 @@ error_out:
202 return retval;
203 }
204
205 -/*
206 - * Resolve `path` into an absolute, cleaned-up path. The return value
207 - * comes from a shared buffer.
208 - */
209 -const char *real_path_if_valid(const char *path)
210 -{
211 - static struct strbuf realpath = STRBUF_INIT;
212 - return strbuf_realpath(&realpath, path, 0);
213 -}
214 -
205 char *real_pathdup(const char *path, int die_on_error)
206 {
207 struct strbuf realpath = STRBUF_INIT;
cache.h
-1
@@ -1314,7 +1314,6 @@ static inline int is_absolute_path(const char *path)
1314 int is_directory(const char *);
1315 char *strbuf_realpath(struct strbuf *resolved, const char *path,
1316 int die_on_error);
1317 -const char *real_path_if_valid(const char *path);
1317 char *real_pathdup(const char *path, int die_on_error);
1318 const char *absolute_path(const char *path);
1319 char *absolute_pathdup(const char *path);
setup.c
+1 -1
@@ -886,7 +886,7 @@ static dev_t get_device_or_die(const char *path, const char *prefix, int prefix_
886
887 /*
888 * A "string_list_each_func_t" function that canonicalizes an entry
889 - * from GIT_CEILING_DIRECTORIES using real_path_if_valid(), or
889 + * from GIT_CEILING_DIRECTORIES using real_pathdup(), or
890 * discards it if unusable. The presence of an empty entry in
891 * GIT_CEILING_DIRECTORIES turns off canonicalization for all
892 * subsequent entries.
sha1-file.c
+4 -9
@@ -676,20 +676,15 @@ void add_to_alternates_memory(const char *reference)
676 char *compute_alternate_path(const char *path, struct strbuf *err)
677 {
678 char *ref_git = NULL;
679 - const char *repo, *ref_git_s;
679 + const char *repo;
680 int seen_error = 0;
681
682 - ref_git_s = real_path_if_valid(path);
683 - if (!ref_git_s) {
682 + ref_git = real_pathdup(path, 0);
683 + if (!ref_git) {
684 seen_error = 1;
685 strbuf_addf(err, _("path '%s' does not exist"), path);
686 goto out;
687 - } else
688 - /*
689 - * Beware: read_gitfile(), real_path() and mkpath()
690 - * return static buffer
691 - */
692 - ref_git = xstrdup(ref_git_s);
687 + }
688
689 repo = read_gitfile(ref_git);
690 if (!repo)
submodule.c
+4 -3
@@ -2173,7 +2173,7 @@ const char *get_superproject_working_tree(void)
2173 static struct strbuf realpath = STRBUF_INIT;
2174 struct child_process cp = CHILD_PROCESS_INIT;
2175 struct strbuf sb = STRBUF_INIT;
2176 - const char *one_up = real_path_if_valid("../");
2176 + struct strbuf one_up = STRBUF_INIT;
2177 const char *cwd = xgetcwd();
2178 const char *ret = NULL;
2179 const char *subpath;
@@ -2188,10 +2188,11 @@ const char *get_superproject_working_tree(void)
2188 */
2189 return NULL;
2190
2191 - if (!one_up)
2191 + if (!strbuf_realpath(&one_up, "../", 0))
2192 return NULL;
2193
2194 - subpath = relative_path(cwd, one_up, &sb);
2194 + subpath = relative_path(cwd, one_up.buf, &sb);
2195 + strbuf_release(&one_up);
2196
2197 prepare_submodule_repo_env(&cp.env_array);
2198 argv_array_pop(&cp.env_array);
worktree.c
+5 -2
@@ -226,17 +226,20 @@ struct worktree *find_worktree(struct worktree **list,
226
227 struct worktree *find_worktree_by_path(struct worktree **list, const char *p)
228 {
229 + struct strbuf wt_path = STRBUF_INIT;
230 char *path = real_pathdup(p, 0);
231
232 if (!path)
233 return NULL;
234 for (; *list; list++) {
234 - const char *wt_path = real_path_if_valid((*list)->path);
235 + if (!strbuf_realpath(&wt_path, (*list)->path, 0))
236 + continue;
237
236 - if (wt_path && !fspathcmp(path, wt_path))
238 + if (!fspathcmp(path, wt_path.buf))
239 break;
240 }
241 free(path);
242 + strbuf_release(&wt_path);
243 return *list;
244 }
245