git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Carlos Martín Nieto" <cmn@elego.de>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 1/3] make_absolute_path: Don't try to copy a string to itself
Date: Mon, 14 Mar 2011 23:02:07 +0100	[thread overview]
Message-ID: <1300140128.4320.39.camel@bee.lab.cmartin.tk> (raw)
In-Reply-To: <7v39mpcuv9.fsf@alter.siamese.dyndns.org>

On lun, 2011-03-14 at 13:25 -0700, Junio C Hamano wrote:
> Carlos Martín Nieto <cmn@elego.de> writes:
> 
> > Sometimes (at least in t-0001-init.sh test 12), the return value of
> > make_absolute_path() is passed to it as an argument, making the first
> 
> I don't think it is a bad idea per-se to avoid a copy from the same memory
> location into the same memory location, but independent of the necessity
> of fixes at the low-level, shouldn't we fix the callers that do not check
> if what they have is already absolute?

 If we'd like the semantics to be "whatever I had, I now know what the
absolute path is" then we could make the check in the beginning of the
function, to centralise the check. If the semantics should be "I don't
have an absolute path, so I need to figure out what it is", then there
should be a check before calling make_absolute_path() (the name suggests
the second).

 As there are only ~15-20 uses of make_absolute_path(), we could just
leave this as it is (as it works under normal conditions and causes
valgrind to warn us), and I'll examine the callers tomorrow.

 There is however the extra functionality the function offers, namely
resolving links. It might be good to split it into two functions so each
caller can specify what it wants.

 There is also this in setup.c:prefix_path()

        const char *orig = path;
        char *sanitized;
        if (is_absolute_path(orig)) {
                const char *temp = make_absolute_path(path);
                sanitized = xmalloc(len + strlen(temp) + 1);
                strcpy(sanitized, temp);
        } else {
                sanitized = xmalloc(len + strlen(path) + 1);
                if (len)
                        memcpy(sanitized, prefix, len);
                strcpy(sanitized + len, path);
        }

which doesn't seem to make sense. Should the call to
make_absolute_path() actually be a call to a function resolve_links()
that just incorporates that functionality from make_absolute_path()?


> 
> > and second arguments to strlcpy() the same, making the test fail when
> > run under valgrind.
> >
> > Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
> > ---
> >
> > This patch assumes the path returned by make_absolute_path() is never
> > longer than PATH_MAX, which I think is a safe assumption.
> 
> >
> >  abspath.c |    2 +-
> >  1 files changed, 1 insertions(+), 1 deletions(-)
> >
> > diff --git a/abspath.c b/abspath.c
> > index 91ca00f..9149a98 100644
> > --- a/abspath.c
> > +++ b/abspath.c
> > @@ -24,7 +24,7 @@ const char *make_absolute_path(const char *path)
> >  	char *last_elem = NULL;
> >  	struct stat st;
> >  
> > -	if (strlcpy(buf, path, PATH_MAX) >= PATH_MAX)
> > +	if (buf != path && strlcpy(buf, path, PATH_MAX) >= PATH_MAX)
> >  		die ("Too long path: %.*s", 60, path);
> >  
> >  	while (depth--) {

  reply	other threads:[~2011-03-14 22:11 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-14 19:18 [PATCH 0/3] Fix some errors reported by valgrind Carlos Martín Nieto
2011-03-14 19:18 ` [PATCH 1/3] make_absolute_path: Don't try to copy a string to itself Carlos Martín Nieto
2011-03-14 20:02   ` Jeff King
2011-03-14 20:25   ` Junio C Hamano
2011-03-14 22:02     ` Carlos Martín Nieto [this message]
2011-03-14 22:58       ` Junio C Hamano
2011-03-15 11:59         ` Carlos Martín Nieto
2011-03-15 12:40           ` Carlos Martín Nieto
2011-03-15 17:02             ` Junio C Hamano
2011-03-15 17:27               ` Carlos Martín Nieto
2011-03-16 14:16                 ` Nguyen Thai Ngoc Duy
2011-03-16 14:49                   ` Carlos Martín Nieto
2011-03-16 14:58                     ` Nguyen Thai Ngoc Duy
2011-03-16 14:04               ` Nguyen Thai Ngoc Duy
2011-03-16 15:08                 ` Carlos Martín Nieto
2011-03-14 19:18 ` [PATCH 2/3] setup_path(): Free temporary buffer Carlos Martín Nieto
2011-03-14 20:09   ` Jeff King
2011-03-14 22:18     ` Carlos Martín Nieto
2011-03-16 11:26     ` [PATCH] system_path: use a static buffer Carlos Martín Nieto
2011-03-16 15:58       ` Erik Faye-Lund
2011-03-16 16:24         ` Carlos Martín Nieto
2011-03-16 16:33         ` Carlos Martín Nieto
2011-03-16 20:43           ` Junio C Hamano
2011-03-17 11:01             ` Carlos Martín Nieto
2011-03-17 14:24               ` Carlos Martín Nieto
2011-03-18  7:25                 ` Junio C Hamano
2011-03-21  9:56                   ` Carlos Martín Nieto
2011-03-21 11:14                     ` Jeff King
2011-03-21 15:26                       ` Carlos Martín Nieto
2011-03-21 15:51                         ` Jeff King
2011-03-21 15:57                           ` Carlos Martín Nieto
2011-03-18 10:34                 ` Nguyen Thai Ngoc Duy
2011-03-18 11:38                   ` PATH_MAX (Re: [PATCH] system_path: use a static buffer) Jonathan Nieder
2011-03-18 11:54                     ` Nguyen Thai Ngoc Duy
2011-03-21  9:47                     ` Carlos Martín Nieto
2011-03-21 12:37                       ` Lasse Makholm
2011-03-21 11:19                     ` Nguyen Thai Ngoc Duy
2011-03-18 11:39                   ` [PATCH 1/2] wrapper.c: add xgetcwd() Nguyễn Thái Ngọc Duy
2011-03-18 11:39                     ` [PATCH 2/2] setup_gently: use xgetcwd() Nguyễn Thái Ngọc Duy
2011-03-14 20:14   ` [PATCH 2/3] setup_path(): Free temporary buffer Junio C Hamano
2011-03-14 22:01     ` Carlos Martín Nieto
2011-03-15  1:12       ` Jeff King
2011-03-15  9:32         ` [PATCH] t/README: Add a note about running commands under valgrind Carlos Martín Nieto
2011-03-15 17:06           ` Junio C Hamano
2011-03-15 17:08             ` Carlos Martín Nieto
2011-03-14 19:18 ` [PATCH 3/3] clone: Free a few paths Carlos Martín Nieto
2011-03-14 19:45   ` Jonathan Nieder
2011-03-18  7:25     ` Junio C Hamano

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=1300140128.4320.39.camel@bee.lab.cmartin.tk \
    --to=cmn@elego.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.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).