From: Junio C Hamano <gitster@pobox.com>
To: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Cc: git@vger.kernel.org, Jonathan Niedier <jrnieder@gmail.com>
Subject: Re: [PATCH/POC 1/7] Make git_path() beware of file relocation in $GIT_DIR
Date: Fri, 13 Dec 2013 08:30:27 -0800 [thread overview]
Message-ID: <xmqqsitwr9wc.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <1386771333-32574-2-git-send-email-pclouds@gmail.com> ("Nguyễn Thái Ngọc Duy"'s message of "Wed, 11 Dec 2013 21:15:27 +0700")
Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:
> +static void adjust_git_path(char *buf, int git_dir_len)
> +{
> + /* XXX buffer overflow */
> + char *base = buf + git_dir_len;
> + if (git_graft_env && !strcmp(base, "info/grafts"))
> + strcpy(buf, get_graft_file());
> + else if (git_index_env && !strcmp(base, "index"))
> + strcpy(buf, get_index_file());
> + else if (git_db_env && dir_prefix(base, "objects"))
> + replace_dir(buf, git_dir_len + 7, get_object_directory());
> +}
> +
> static char *vsnpath(char *buf, size_t n, const char *fmt, va_list args)
> {
> const char *git_dir = get_git_dir();
> - size_t len;
> + size_t len, total_len;
>
> len = strlen(git_dir);
> if (n < len + 1)
> @@ -60,9 +88,10 @@ static char *vsnpath(char *buf, size_t n, const char *fmt, va_list args)
> memcpy(buf, git_dir, len);
> if (len && !is_dir_sep(git_dir[len-1]))
> buf[len++] = '/';
> - len += vsnprintf(buf + len, n - len, fmt, args);
> - if (len >= n)
> + total_len = len + vsnprintf(buf + len, n - len, fmt, args);
> + if (total_len >= n)
> goto bad;
> + adjust_git_path(buf, len);
This is a minor tangent, but this part of the patch made me raise my
eyebrow, wondering what Git-specific path mangler is doing in a
function vsnpath that is named as if it is a lot more generic, until
I read the change in context.
The vnspath() is already Git-specific---it is a helper that is used
to create a path inside the $GIT_DIR directory.
We probably should do two things to clear things up:
- Right now, path.c has definitions of functions in this order:
char *mksnpath(char *buf, size_t n, const char *fmt, ...)
static char *vsnpath(char *buf, size_t n, const char *fmt, va_list args)
char *git_snpath(char *buf, size_t n, const char *fmt, ...)
char *git_pathdup(const char *fmt, ...)
char *mkpathdup(const char *fmt, ...)
char *mkpath(const char *fmt, ...)
char *git_path(const char *fmt, ...)
The two functions mkpathdup() and mkpath() are not Git specific
at all. They should be moved up to be grouped together with
mksnpath() that is also not Git-specific.
- Rename the static vsnpath() to further clarify that it is Git
specific.
next prev parent reply other threads:[~2013-12-13 16:30 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-11 14:15 [PATCH/POC 0/7] Support multiple worktrees Nguyễn Thái Ngọc Duy
2013-12-11 14:15 ` [PATCH/POC 1/7] Make git_path() beware of file relocation in $GIT_DIR Nguyễn Thái Ngọc Duy
2013-12-13 16:30 ` Junio C Hamano [this message]
2013-12-11 14:15 ` [PATCH/POC 2/7] Add new environment variable $GIT_SUPER_DIR Nguyễn Thái Ngọc Duy
2013-12-13 18:12 ` Junio C Hamano
2013-12-14 1:11 ` Duy Nguyen
2013-12-14 19:43 ` Junio C Hamano
2013-12-11 14:15 ` [PATCH/POC 3/7] setup.c: add split-repo support to .git files Nguyễn Thái Ngọc Duy
2013-12-13 18:30 ` Junio C Hamano
2013-12-13 20:43 ` Jonathan Nieder
2013-12-14 1:28 ` Duy Nguyen
2013-12-23 3:38 ` Duy Nguyen
2013-12-11 14:15 ` [PATCH/POC 4/7] setup.c: add split-repo support to is_git_directory() Nguyễn Thái Ngọc Duy
2013-12-11 14:15 ` [PATCH/POC 5/7] setup.c: reduce cleanup sites in setup_explicit_git_dir() Nguyễn Thái Ngọc Duy
2013-12-11 14:15 ` [PATCH/POC 6/7] setup.c: add split-repo support to setup_git_directory* Nguyễn Thái Ngọc Duy
2013-12-11 14:15 ` [PATCH/POC 7/7] init: add --split-repo with the same functionality as git-new-workdir Nguyễn Thái Ngọc Duy
2013-12-14 10:54 ` [PATCH v2 00/21] Support multiple worktrees Nguyễn Thái Ngọc Duy
2013-12-14 10:54 ` [PATCH v2 01/21] path.c: avoid PATH_MAX as buffer size from get_pathname() Nguyễn Thái Ngọc Duy
2013-12-15 8:35 ` Torsten Bögershausen
2013-12-15 9:02 ` Duy Nguyen
2013-12-15 9:33 ` Antoine Pelisse
2013-12-14 10:54 ` [PATCH v2 02/21] path.c: rename vsnpath() to git_vsnpath() Nguyễn Thái Ngọc Duy
2013-12-14 20:23 ` Ramsay Jones
2013-12-15 2:25 ` Duy Nguyen
2013-12-15 21:13 ` Ramsay Jones
2013-12-16 7:21 ` Duy Nguyen
2013-12-16 17:11 ` Jonathan Nieder
2013-12-16 20:16 ` Junio C Hamano
2013-12-16 22:59 ` Ramsay Jones
2013-12-14 10:54 ` [PATCH v2 03/21] path.c: move git_path() closer to similar functions git_pathdup() Nguyễn Thái Ngọc Duy
2013-12-14 10:54 ` [PATCH v2 04/21] Make git_path() aware of file relocation in $GIT_DIR Nguyễn Thái Ngọc Duy
2013-12-14 10:54 ` [PATCH v2 05/21] reflog: use avoid constructing .lock path with git_path Nguyễn Thái Ngọc Duy
2013-12-14 10:54 ` [PATCH v2 06/21] fast-import: use git_path() for accessing .git dir instead of get_git_dir() Nguyễn Thái Ngọc Duy
2013-12-14 10:54 ` [PATCH v2 07/21] Add new environment variable $GIT_SUPER_DIR Nguyễn Thái Ngọc Duy
2013-12-14 10:54 ` [PATCH v2 08/21] setup.c: refactor path manipulation out of read_gitfile() Nguyễn Thái Ngọc Duy
2013-12-14 10:54 ` [PATCH v2 09/21] setup.c: add split-repo support to .git files Nguyễn Thái Ngọc Duy
2013-12-14 10:54 ` [PATCH v2 10/21] setup.c: add split-repo support to is_git_directory() Nguyễn Thái Ngọc Duy
2013-12-14 10:54 ` [PATCH v2 11/21] setup.c: reduce cleanup sites in setup_explicit_git_dir() Nguyễn Thái Ngọc Duy
2013-12-14 10:54 ` [PATCH v2 12/21] environment.c: support super .git file specified by $GIT_DIR Nguyễn Thái Ngọc Duy
2013-12-14 10:54 ` [PATCH v2 13/21] setup: support $GIT_SUPER_DIR as well as super .git files Nguyễn Thái Ngọc Duy
2013-12-14 10:55 ` [PATCH v2 14/21] checkout: support checking out into a new working directory Nguyễn Thái Ngọc Duy
2013-12-14 10:55 ` [PATCH v2 15/21] checkout: clean up half-prepared directories in --to mode Nguyễn Thái Ngọc Duy
2013-12-14 10:55 ` [PATCH v2 16/21] setup.c: keep track of the .git file location if read Nguyễn Thái Ngọc Duy
2013-12-14 10:55 ` [PATCH v2 17/21] prune: strategies for split repositories Nguyễn Thái Ngọc Duy
2013-12-14 10:55 ` [PATCH v2 18/21] refs: adjust reflog path for repos/<id>/HEAD Nguyễn Thái Ngọc Duy
2013-12-14 10:55 ` [PATCH v2 19/21] refs: detach split repos' HEAD when the linked ref is updated/deleted Nguyễn Thái Ngọc Duy
2013-12-14 10:55 ` [PATCH v2 20/21] refs.c: refactor do_head_ref(... to do_one_head_ref("HEAD", Nguyễn Thái Ngọc Duy
2013-12-14 10:55 ` [PATCH v2 21/21] revision: include repos/../HEAD in --all Nguyễn Thái Ngọc Duy
2013-12-15 2:29 ` [PATCH v2 00/21] Support multiple worktrees Duy Nguyen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqsitwr9wc.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=jrnieder@gmail.com \
--cc=pclouds@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).