From: Michael Haggerty <mhagger@alum.mit.edu>
To: Junio C Hamano <gitster@pobox.com>
Cc: Jiang Xin <worldhello.net@gmail.com>,
Lea Wiemann <lewiemann@gmail.com>,
git@vger.kernel.org
Subject: Re: [PATCH 3/8] longest_ancestor_length(): use string_list_split()
Date: Sat, 29 Sep 2012 07:25:18 +0200 [thread overview]
Message-ID: <5066863E.1030005@alum.mit.edu> (raw)
In-Reply-To: <7vr4pnnkux.fsf@alter.siamese.dyndns.org>
On 09/28/2012 12:48 AM, Junio C Hamano wrote:
> Michael Haggerty <mhagger@alum.mit.edu> writes:
>
>> - for (colon = ceil = prefix_list; *colon; ceil = colon+1) {
>> - for (colon = ceil; *colon && *colon != PATH_SEP; colon++);
>> - len = colon - ceil;
>> + string_list_split(&prefixes, prefix_list, PATH_SEP, -1);
>> +
>> + for (i = 0; i < prefixes.nr; i++) {
>> + const char *ceil = prefixes.items[i].string;
>> + int len = strlen(ceil);
>> +
>
> Much nicer than the yucky original ;-)
If your winky-smiley implies irony, then I would like to object. Even
though the original is not difficult to understand, it is more difficult
to review than the new version because one has to think about off-by-one
errors etc. The new version has a bit more boilerplate, but a quick
read suffices both to understand it and to see that it is correct.
Though of course I admit that the improvement is small.
But the main point of this change is to move towards using more testable
parts, so it is a step forward regardless of whether it is more readable.
>> if (len == 0 || len > PATH_MAX || !is_absolute_path(ceil))
>> continue;
>> - strlcpy(buf, ceil, len+1);
>> + memcpy(buf, ceil, len+1);
>> if (normalize_path_copy(buf, buf) < 0)
>> continue;
>
> Why do you need this memcpy in the first place? Isn't ceil already
> a NUL terminated string unlike the original code that points into a
> part of the prefix_list string? IOW, why not
>
> normalize_path_copy(buf, ceil);
>
> or something?
Good point. I will fix this in v2.
> Can normalize_path_copy() overflow buf[PATH_MAX+1] here (before or
> after this patch)?
normalize_path_copy() can only shrink paths, not grow them. So the
length check on ceil guarantees that the result of normalize_path_copy()
will fit in buf.
Michael
--
Michael Haggerty
mhagger@alum.mit.edu
http://softwareswirl.blogspot.com/
next prev parent reply other threads:[~2012-09-29 5:25 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-24 8:00 [PATCH] test: some testcases failed if cwd is on a symlink Jiang Xin
2012-07-24 8:24 ` Stefano Lattarini
2012-07-24 10:59 ` Pete Wyckoff
2012-07-24 14:47 ` Junio C Hamano
2012-07-24 22:06 ` Jiang Xin
2012-08-18 14:41 ` Michael Haggerty
2012-08-18 20:36 ` Junio C Hamano
2012-08-19 13:57 ` Michael Haggerty
2012-08-19 16:43 ` Junio C Hamano
2012-08-21 5:59 ` Michael Haggerty
2012-08-27 5:13 ` [PATCH v2] test: set the realpath of CWD as TRASH_DIRECTORY Jiang Xin
2012-08-27 16:15 ` Junio C Hamano
2012-08-29 4:14 ` Michael Haggerty
2012-08-29 6:06 ` Junio C Hamano
2012-08-29 8:15 ` Michael Haggerty
2012-08-29 16:33 ` Junio C Hamano
2012-08-30 4:37 ` Michael Haggerty
2012-08-30 5:26 ` Junio C Hamano
2012-08-31 7:49 ` Michael Haggerty
2012-09-26 19:34 ` [PATCH 0/8] Fix GIT_CEILING_DIRECTORIES that contain symlinks Michael Haggerty
2012-09-26 19:34 ` [PATCH 1/8] Introduce new static function real_path_internal() Michael Haggerty
2012-09-27 21:27 ` Junio C Hamano
2012-09-29 4:56 ` Michael Haggerty
2012-09-29 5:40 ` Junio C Hamano
2012-09-26 19:34 ` [PATCH 2/8] Introduce new function real_path_if_valid() Michael Haggerty
2012-09-26 19:34 ` [PATCH 3/8] longest_ancestor_length(): use string_list_split() Michael Haggerty
2012-09-27 22:48 ` Junio C Hamano
2012-09-29 5:25 ` Michael Haggerty [this message]
2012-09-29 5:43 ` Junio C Hamano
2012-09-26 19:34 ` [PATCH 4/8] longest_ancestor_length(): explicitly filter list before loop Michael Haggerty
2012-09-27 22:48 ` Junio C Hamano
2012-09-26 19:34 ` [PATCH 5/8] longest_ancestor_length(): always add a slash to the end of prefixes Michael Haggerty
2012-09-26 19:34 ` [PATCH 6/8] longest_ancestor_length(): use string_list_longest_prefix() Michael Haggerty
2012-09-26 19:34 ` [PATCH 7/8] longest_ancestor_length(): resolve symlinks before comparing paths Michael Haggerty
2012-09-27 22:51 ` Junio C Hamano
2012-09-29 5:46 ` Michael Haggerty
2012-09-26 19:34 ` [PATCH 8/8] t1504: stop resolving symlinks in GIT_CEILING_DIRECTORIES Michael Haggerty
2012-09-27 19:42 ` [PATCH 0/8] Fix GIT_CEILING_DIRECTORIES that contain symlinks 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=5066863E.1030005@alum.mit.edu \
--to=mhagger@alum.mit.edu \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=lewiemann@gmail.com \
--cc=worldhello.net@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.