From: Junio C Hamano <gitster@pobox.com>
To: "Dmitry S. Dolzhenko" <dmitrys.dolzhenko@yandex.ru>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] Use ALLOC_GROW() instead of inline code
Date: Thu, 27 Feb 2014 14:44:07 -0800 [thread overview]
Message-ID: <xmqqr46ow4zs.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <530FA3E7.8020200@yandex.ru> (Dmitry S. Dolzhenko's message of "Fri, 28 Feb 2014 00:45:27 +0400")
"Dmitry S. Dolzhenko" <dmitrys.dolzhenko@yandex.ru> writes:
> diff --git a/dir.c b/dir.c
> index b35b633..72f6e2a 100644
> --- a/dir.c
> +++ b/dir.c
> @@ -1329,13 +1329,10 @@ static struct path_simplify *create_simplify(const char **pathspec)
>
> for (nr = 0 ; ; nr++) {
> const char *match;
> - if (nr >= alloc) {
> - alloc = alloc_nr(alloc);
> - simplify = xrealloc(simplify, alloc * sizeof(*simplify));
> - }
> match = *pathspec++;
> if (!match)
> break;
> + ALLOC_GROW(simplify, nr + 1, alloc);
> simplify[nr].path = match;
> simplify[nr].len = simple_length(match);
> }
What follows the post-context of this hunk is a NULL termination of
the array:
simplify[nr].path = NULL;
simplify[nr].len = 0;
If the first element in pathspec[] were NULL, we set nr to 0, break
the loop without calling ALLOC_GROW() even once, and try to NULL
terminate simplify[] array after the loop.
Don't we try to store to an unallocated piece of memory with this
change?
> diff --git a/read-cache.c b/read-cache.c
> index 33dd676..e585541 100644
> --- a/read-cache.c
> +++ b/read-cache.c
> @@ -1466,8 +1462,7 @@ int read_index_from(struct index_state *istate, const char *path)
>
> istate->version = ntohl(hdr->hdr_version);
> istate->cache_nr = ntohl(hdr->hdr_entries);
> - istate->cache_alloc = alloc_nr(istate->cache_nr);
> - istate->cache = xcalloc(istate->cache_alloc, sizeof(*istate->cache));
> + ALLOC_GROW(istate->cache, istate->cache_nr, istate->cache_alloc);
This being the initial allocation, not growing reallocation, use of
ALLOC_GROW() looks somewhat strange. I know that an realloc from
NULL ends up being the same as calloc(), but still.
next prev parent reply other threads:[~2014-02-27 22:44 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-27 20:45 [PATCH] Use ALLOC_GROW() instead of inline code Dmitry S. Dolzhenko
2014-02-27 22:11 ` Michael Haggerty
2014-02-27 22:44 ` Junio C Hamano [this message]
2014-02-28 9:29 ` [PATCH v2 00/11] " Dmitry S. Dolzhenko
2014-02-28 9:40 ` [PATCH v2 01/11] builtin/pack-objects.c: change check_pbase_path() to use ALLOC_GROW() Dmitry S. Dolzhenko
2014-02-28 12:32 ` Duy Nguyen
2014-02-28 12:40 ` Duy Nguyen
2014-02-28 14:20 ` Michael Haggerty
2014-02-28 14:36 ` Duy Nguyen
2014-02-28 19:03 ` Junio C Hamano
2014-03-01 7:07 ` Jeff King
2014-03-03 18:23 ` Junio C Hamano
2014-02-28 9:41 ` [PATCH v2 02/11] bundle.c: change add_to_ref_list() " Dmitry S. Dolzhenko
2014-02-28 9:41 ` [PATCH v2 03/11] cache-tree.c: change find_subtree() " Dmitry S. Dolzhenko
2014-02-28 9:42 ` [PATCH v2 04/11] commit.c: change register_commit_graft() " Dmitry S. Dolzhenko
2014-02-28 9:43 ` [PATCH v2 05/11] diff.c: use ALLOC_GROW() instead of inline code Dmitry S. Dolzhenko
2014-02-28 9:44 ` [PATCH v2 06/11] diffcore-rename.c: " Dmitry S. Dolzhenko
2014-02-28 9:45 ` [PATCH v2 07/11] patch-ids.c: change add_commit() to use ALLOC_GROW() Dmitry S. Dolzhenko
2014-02-28 9:45 ` [PATCH v2 08/11] replace_object.c: change register_replace_object() " Dmitry S. Dolzhenko
2014-02-28 9:46 ` [PATCH v2 09/11] reflog-walk.c: use ALLOC_GROW() instead of inline code Dmitry S. Dolzhenko
2014-02-28 12:39 ` Duy Nguyen
2014-02-28 19:06 ` Junio C Hamano
2014-02-28 9:46 ` [PATCH v2 10/11] dir.c: change create_simplify() to use ALLOC_GROW() Dmitry S. Dolzhenko
2014-02-28 9:47 ` [PATCH v2 11/11] attr.c: change handle_attr_line() " Dmitry S. Dolzhenko
2014-02-28 14:38 ` [PATCH v2 00/11] Use ALLOC_GROW() instead of inline code Michael Haggerty
2014-03-01 6:57 ` Dmitry S. Dolzhenko
2014-03-03 18:20 ` Junio C Hamano
2014-03-03 7:18 ` [PATCH v3 " Dmitry S. Dolzhenko
2014-03-03 7:19 ` [PATCH v3 01/11] builtin/pack-objects.c: use ALLOC_GROW() in check_pbase_path() Dmitry S. Dolzhenko
2014-03-03 7:20 ` [PATCH v3 02/11] bundle.c: use ALLOC_GROW() in add_to_ref_list() Dmitry S. Dolzhenko
2014-03-03 7:20 ` [PATCH v3 03/11] cache-tree.c: use ALLOC_GROW() in find_subtree() Dmitry S. Dolzhenko
2014-03-03 7:21 ` [PATCH v3 04/11] commit.c: use ALLOC_GROW() in register_commit_graft() Dmitry S. Dolzhenko
2014-03-03 7:22 ` [PATCH v3 05/11] diff.c: use ALLOC_GROW() Dmitry S. Dolzhenko
2014-03-03 7:22 ` [PATCH v3 06/11] diffcore-rename.c: " Dmitry S. Dolzhenko
2014-03-03 7:23 ` [PATCH v3 07/11] patch-ids.c: use ALLOC_GROW() in add_commit() Dmitry S. Dolzhenko
2014-03-03 7:23 ` [PATCH v3 08/11] replace_object.c: use ALLOC_GROW() in register_replace_object() Dmitry S. Dolzhenko
2014-03-03 7:24 ` [PATCH v3 09/11] reflog-walk.c: use ALLOC_GROW() Dmitry S. Dolzhenko
2014-03-03 7:25 ` [PATCH v3 10/11] dir.c: use ALLOC_GROW() in create_simplify() Dmitry S. Dolzhenko
2014-03-03 7:25 ` [PATCH v3 11/11] attr.c: use ALLOC_GROW() in handle_attr_line() Dmitry S. Dolzhenko
2014-03-03 8:23 ` [PATCH v3 00/11] Use ALLOC_GROW() instead of inline code Eric Sunshine
2014-03-03 19:07 ` Junio C Hamano
2014-03-03 14:20 ` [PATCH] " He Sun
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=xmqqr46ow4zs.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox.com \
--cc=dmitrys.dolzhenko@yandex.ru \
--cc=git@vger.kernel.org \
/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).