git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: nguyenhu@minatec.inpg.fr
To: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Cc: nguyenhu@ensibm.imag.fr, git@vger.kernel.org,
	Matthieu.Moy@grenoble-inp.fr,
	Lucien KONG <Lucien.Kong@ensimag.imag.fr>,
	Valentin DUPERRAY <Valentin.Duperray@ensimag.imag.fr>,
	Thomas NGUY <Thomas.Nguy@ensimag.imag.fr>,
	Franck JONAS <Franck.Jonas@ensimag.imag.fr>,
	Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCHv4] Read (but not write) from XDG configuration, XDG attributes and XDG ignore files
Date: Tue, 05 Jun 2012 14:19:16 +0200	[thread overview]
Message-ID: <20120605141916.Horde.wKnrT3wdC4BPzflEUfYiRPA@webmail.minatec.grenoble-inp.fr> (raw)
In-Reply-To: <4FCCF63B.8070609@ramsay1.demon.co.uk>


Ramsay Jones <ramsay@ramsay1.demon.co.uk> a écrit :
>
> So, this re-introduces the bug addressed by commit 05bab3ea. The test number
> is now 29 (rather than 21) but the same test is failing; namely  
> t3200-branch.sh
> test #29 (git branch -m q q2 without config should succeed).
>
> In order to fix the bug, I created the patch given below (on top of  
> this patch).
> (Note that it does not address the above issues).
>
> HTH
>
> ATB,
> Ramsay Jones
>
> -- >8 --
> From: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
> Subject: [PATCH] path.c: Fix a static buffer overwrite bug by  
> avoiding mkpath()
>
> The v4 version of the "Read (but not write) from XDG configuration,
> XDG attributes and XDG ignore files" patch, re-introduced the bug
> addressed by commit 05bab3ea ("config.c: Fix a static buffer overwrite
> bug by avoiding mkpath()", 19-11-2011). Note that the patch refactored
> the code to determine the user (or home) configuration filename into
> a new function (home_config_paths()). In doing so, the new code once
> again uses mkpath() rather than mksnpath().
>
> In order to fix the bug, we introduce a new variation of the mkpath()
> function, mkpathdup(), which avoids the use of the internal static
> buffers. As the name implies, the new function returns a pointer to
> the pathname as a dynamically allocated string. It is the callers
> responsibility to free the memory for the returned string.
>
> Having introduced the new function, we can now replace the calls to
> 'xstrdup(mkpath(...))' in the home_config_paths() function with a
> call to mkpathdup() to achieve the same effect, without tickling the
> original bug.
>
> (Also, note that the 'xstrdup(mkpath(...))' pattern occurs in several
> other places in the source ...)
>
> Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
> ---
>  cache.h |    2 ++
>  path.c  |   20 +++++++++++++++++---
>  2 files changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/cache.h b/cache.h
> index 0632503..fbba2d6 100644
> --- a/cache.h
> +++ b/cache.h
> @@ -619,6 +619,8 @@ extern char *git_snpath(char *buf, size_t n,  
> const char *fmt, ...)
>  	__attribute__((format (printf, 3, 4)));
>  extern char *git_pathdup(const char *fmt, ...)
>  	__attribute__((format (printf, 1, 2)));
> +extern char *mkpathdup(const char *fmt, ...)
> +	__attribute__((format (printf, 1, 2)));
>
>  /* Return a statically allocated filename matching the sha1 signature */
>  extern char *mkpath(const char *fmt, ...) __attribute__((format  
> (printf, 1, 2)));
> diff --git a/path.c b/path.c
> index 53f3f53..ca29bdd 100644
> --- a/path.c
> +++ b/path.c
> @@ -87,6 +87,20 @@ char *git_pathdup(const char *fmt, ...)
>  	return xstrdup(path);
>  }
>
> +char *mkpathdup(const char *fmt, ...)
> +{
> +	char path[PATH_MAX];
> +	va_list args;
> +	unsigned len;
> +
> +	va_start(args, fmt);
> +	len = vsnprintf(path, sizeof(path), fmt, args);
> +	va_end(args);
> +	if (len >= sizeof(path))
> +		return xstrdup(bad_path);
> +	return xstrdup(cleanup_path(path));
> +}
> +
>  char *mkpath(const char *fmt, ...)
>  {
>  	va_list args;
> @@ -133,17 +147,17 @@ void home_config_paths(char **global, char  
> **xdg, char *file)
>  			*global = NULL;
>  	} else {
>  		if (!xdg_home) {
> -			to_free = strdup(mkpath("%s/.config", home));
> +			to_free = mkpathdup("%s/.config", home);
>  			xdg_home = to_free;
>  		}
>  		if (global)
> -			*global = xstrdup(mkpath("%s/.gitconfig", home));
> +			*global = mkpathdup("%s/.gitconfig", home);
>  	}
>
>  	if (!xdg_home)
>  		*xdg = NULL;
>  	else
> -		*xdg = xstrdup(mkpath("%s/git/%s", xdg_home, file));
> +		*xdg = mkpathdup("%s/git/%s", xdg_home, file);
>
>  	free(to_free);
>  }
> --
> 1.7.10
>

Thank you for having fixed this bug we have re-introduced with your  
patch, we will add your modifications in our next v6 version.

      parent reply	other threads:[~2012-06-05 12:19 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1338400509-26087-1-git-send-email-Huynh-Khoi-Nguyen.Nguyen@ensimag.imag.fr>
2012-05-30 21:19 ` [PATCHv2] Possibility to read both from ~/.gitconfig and from $XDG_CONFIG_HOME/git/config Huynh Khoi Nguyen NGUYEN
2012-05-30 21:54   ` Junio C Hamano
2012-05-31 22:06     ` Ramsay Jones
2012-05-31 14:40   ` [PATCHv3] Read from XDG configuration file, not write Huynh Khoi Nguyen NGUYEN
2012-05-31 20:13     ` Junio C Hamano
2012-06-01 21:23     ` [PATCHv4] Read (but not write) from XDG configuration, XDG attributes and XDG ignore files Huynh Khoi Nguyen NGUYEN
2012-06-02 11:20       ` Matthieu Moy
2012-06-02 15:52         ` nguyenhu
2012-06-02 21:05           ` Matthieu Moy
2012-06-03 20:14       ` [PATCHv5 1/4] Read (but not write) from $XDG_CONFIG_HOME/git/config file Huynh Khoi Nguyen NGUYEN
2012-06-03 20:14         ` [PATCHv5 2/4] Let core.excludesfile default to $XDG_CONFIG_HOME/git/ignore Huynh Khoi Nguyen NGUYEN
2012-06-04 11:43           ` Matthieu Moy
2012-06-05 13:17             ` nguyenhu
2012-06-03 20:14         ` [PATCHv5 3/4] Let core.attributesfile default to $XDG_CONFIG_HOME/git/attributes Huynh Khoi Nguyen NGUYEN
2012-06-03 20:14         ` [PATCHv5 4/4] Write to $XDG_CONFIG_HOME/git/config file Huynh Khoi Nguyen NGUYEN
2012-06-04 21:17           ` Matthieu Moy
2012-06-05 13:04             ` nguyenhu
2012-06-06 13:21         ` [PATCHv6 1/4] Read (but not write) from " Huynh Khoi Nguyen NGUYEN
2012-06-06 13:21           ` [PATCHv6 2/4] Let core.excludesfile default to $XDG_CONFIG_HOME/git/ignore Huynh Khoi Nguyen NGUYEN
2012-06-07 23:31             ` Junio C Hamano
2012-06-08  8:47               ` Matthieu Moy
2012-06-08  9:02               ` nguyenhu
2012-06-06 13:21           ` [PATCHv6 3/4] Let core.attributesfile default to $XDG_CONFIG_HOME/git/attributes Huynh Khoi Nguyen NGUYEN
2012-06-06 13:21           ` [PATCHv6 4/4] Write to $XDG_CONFIG_HOME/git/config file Huynh Khoi Nguyen NGUYEN
2012-06-09  3:48             ` David Aguilar
2012-06-09  6:19               ` Junio C Hamano
2012-06-09 17:25                 ` David Aguilar
2012-06-10 13:21                 ` Matthieu Moy
2012-06-11 23:45                   ` nguyenhu
2012-06-07 22:58           ` [PATCHv6 1/4] Read (but not write) from " Junio C Hamano
2012-06-08  9:57             ` nguyenhu
2012-06-12 17:42               ` Ramsay Jones
2012-06-08 12:26             ` nguyenhu
2012-06-08 12:33               ` Erik Faye-Lund
2012-06-08 12:54                 ` nguyenhu
2012-06-08 12:57                   ` Erik Faye-Lund
2012-06-08 15:08               ` Junio C Hamano
2012-06-09 10:53                 ` nguyenhu
2012-06-10  6:41                   ` Junio C Hamano
2012-06-10 13:48                     ` nguyenhu
2012-06-10 18:44                       ` Erik Faye-Lund
2012-06-10 20:02                         ` nguyenhu
2012-06-10 20:27                           ` Erik Faye-Lund
2012-06-11 15:50                         ` Junio C Hamano
2012-06-11 16:53                           ` nguyenhu
2012-06-11 22:59                             ` nguyenhu
2012-06-11 23:03                             ` Erik Faye-Lund
2012-06-12  2:49           ` [PATCHv7 " Huynh Khoi Nguyen Nguyen
2012-06-12  2:49             ` [PATCHv7 2/4] Let core.excludesfile default to $XDG_CONFIG_HOME/git/ignore Huynh Khoi Nguyen Nguyen
2012-06-12  2:49             ` [PATCHv7 3/4] Let core.attributesfile default to $XDG_CONFIG_HOME/git/attributes Huynh Khoi Nguyen Nguyen
2012-06-12  2:49             ` [PATCHv7 4/4] Write to $XDG_CONFIG_HOME/git/config file Huynh Khoi Nguyen Nguyen
2012-06-14 17:31             ` [PATCHv7 1/4] Read (but not write) from " Ramsay Jones
2012-06-21 16:55             ` Matthieu Moy
2012-06-21 17:22               ` Junio C Hamano
2012-06-22  9:03                 ` [PATCH 0/4 v8] Git configuration directory Matthieu Moy
2012-06-22  9:03                   ` [PATCH 1/4 v8] config: read (but not write) from $XDG_CONFIG_HOME/git/config file Matthieu Moy
2012-07-12  7:55                     ` Thomas Rast
2012-07-12 12:04                       ` [PATCH] config: fix several access(NULL) calls Matthieu Moy
2012-07-12 12:39                         ` Thomas Rast
2012-07-12 17:14                         ` Junio C Hamano
2012-07-12 19:34                           ` Matthieu Moy
2012-07-12 20:12                             ` Junio C Hamano
2012-07-13  8:48                               ` Matthieu Moy
2012-07-13  8:59                                 ` [PATCH v2] " Matthieu Moy
2012-07-13 13:00                                 ` [PATCH] " Jeff King
2012-07-13 13:15                                   ` Matthieu Moy
2012-07-13 14:05                                     ` Thomas Rast
2012-07-13 14:23                                       ` Matthieu Moy
2012-07-13 16:49                                         ` Junio C Hamano
2012-07-16  9:45                                           ` Matthieu Moy
2012-07-16 16:35                                             ` Junio C Hamano
2012-07-16 16:39                                               ` Matthieu Moy
2012-07-16 16:56                                                 ` Junio C Hamano
2012-06-22  9:03                   ` [PATCH 2/4 v8] Let core.excludesfile default to $XDG_CONFIG_HOME/git/ignore Matthieu Moy
2012-06-22  9:03                   ` [PATCH 3/4 v8] Let core.attributesfile " Matthieu Moy
2012-06-22 21:20                     ` Junio C Hamano
2012-06-25  6:32                       ` Matthieu Moy
2012-06-25  7:22                         ` Junio C Hamano
2012-06-25  7:56                           ` Matthieu Moy
2012-06-22  9:03                   ` [PATCH 4/4 v8] config: write to $XDG_CONFIG_HOME/git/config file if appropriate Matthieu Moy
2012-06-22 21:20                     ` Junio C Hamano
2012-06-25  6:45                       ` Matthieu Moy
2012-06-25 18:08                         ` Junio C Hamano
2012-06-22 21:19                   ` [PATCH 0/4 v8] Git configuration directory Junio C Hamano
2012-06-04 17:54       ` [PATCHv4] Read (but not write) from XDG configuration, XDG attributes and XDG ignore files Ramsay Jones
2012-06-04 18:41         ` Junio C Hamano
2012-06-12 17:32           ` Ramsay Jones
2012-06-05 12:19         ` nguyenhu [this message]

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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120605141916.Horde.wKnrT3wdC4BPzflEUfYiRPA@webmail.minatec.grenoble-inp.fr \
    --to=nguyenhu@minatec.inpg.fr \
    --cc=Franck.Jonas@ensimag.imag.fr \
    --cc=Lucien.Kong@ensimag.imag.fr \
    --cc=Matthieu.Moy@grenoble-inp.fr \
    --cc=Thomas.Nguy@ensimag.imag.fr \
    --cc=Valentin.Duperray@ensimag.imag.fr \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=nguyenhu@ensibm.imag.fr \
    --cc=ramsay@ramsay1.demon.co.uk \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).