From: Karthik Nayak <karthik.188@gmail.com>
To: Eric Sunshine <sunshine@sunshineco.com>
Cc: Git List <git@vger.kernel.org>
Subject: Re: [PATCH 1/2] sha1_file: Add sha1_object_type_literally and export it.
Date: Thu, 26 Feb 2015 20:37:38 +0530 [thread overview]
Message-ID: <1424963258.13965.1.camel@gmail.com> (raw)
In-Reply-To: <CAPig+cQDLU4CBQtE8vAKLyz4Xv=2DsDDMz787DVjrFwW2tiKXg@mail.gmail.com>
On Wed, 2015-02-25 at 16:55 -0500, Eric Sunshine wrote:
> I had written a longer review but was interrupted for a several hours,
> and upon returning found that David and Junio covered many of the same
> issues or overrode comments I was making, so the below review is pared
> down quite a bit. Junio's proposed approach negates all of the below
> review comments, but they may still be meaningful if kept in mind for
> future submissions.
>
> On Wed, Feb 25, 2015 at 6:07 AM, Karthik Nayak <karthik.188@gmail.com> wrote:
> > sha1_file: Add sha1_object_type_literally and export it.
>
> Style: downcase "Add"; drop terminating period.
>
> > sha1_object_type_literally takes a sha value and
> > gives the type of the given loose object, used by
> > git cat-file -t --literally.
> >
> > Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
> > ---
> > --- a/sha1_file.c
> > +++ b/sha1_file.c
> > @@ -2635,6 +2635,33 @@ int sha1_object_info(const unsigned char *sha1, unsigned long *sizep)
> > return type;
> > }
> >
> > +int sha1_object_type_literally(const unsigned char *sha1, char *type)
>
> This functionality is very specific to the --literally option you're
> adding to cat-file, so it would make more sense to make it private to
> builtin/cat-file.c rather than publishing it globally.
>
> Also, this is an unsafe contract. The caller does not know how many
> bytes to allocate for 'type', and this new function may write past the
> end of the buffer. It is more common to also pass in the size of the
> 'type' buffer and ensure that you do not write beyond that. Or, if
> this is intended for wider consumption, pass in a strbuf instead.
>
> > +{
> > + int status = 0;
> > + unsigned long mapsize;
> > + void *map;
> > + git_zstream stream;
> > + char hdr[32];
> > + int i;
> > +
> > + map = map_sha1_file(sha1, &mapsize);
> > + if (!map)
> > + return -1;
> > + if (unpack_sha1_header(&stream, map, mapsize, hdr, sizeof(hdr)) < 0)
> > + status = error("unable to unpack %s header",
> > + sha1_to_hex(sha1));
>
> Since 'hdr' unpacking failed, shouldn't you be returning at this point
> rather than continuing to the 'hdr' processing loop?
>
> > + for (i = 0; i < 32; i++) {
> > + if (hdr[i] == ' ') {
> > + type[i] = '\0';
> > + break;
> > + }
> > + type[i] = hdr[i];
> > + }
>
> David already mentioned that this loop is suspect. Perhaps take a look
> at, sha1_file.c:parse_sha1_header() for an example of cleaner logic.
>
> > +
> > + return status;
> > +}
> > +
> > static void *read_packed_sha1(const unsigned char *sha1,
> > enum object_type *type, unsigned long *size)
> > {
> > --
> > 2.3.1.129.g11acff1.dirty
Thanks for all your inputs, I will work on the points you've mentioned
considering what David and Junio also have mentioned.
next prev parent reply other threads:[~2015-02-26 15:07 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-25 11:06 [PATCH 0/2] cat-file --literally karthik nayak
2015-02-25 11:07 ` [PATCH 1/2] sha1_file: Add sha1_object_type_literally and export it Karthik Nayak
2015-02-25 18:22 ` David Turner
2015-02-25 19:59 ` karthik nayak
2015-02-25 20:15 ` David Turner
2015-02-25 21:32 ` Junio C Hamano
2015-02-25 22:44 ` Junio C Hamano
2015-02-25 21:55 ` Eric Sunshine
2015-02-26 15:07 ` Karthik Nayak [this message]
2015-02-25 11:08 ` [PATCH 2/2] cat-file: add --literally option Karthik Nayak
2015-02-25 22:14 ` Eric Sunshine
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=1424963258.13965.1.camel@gmail.com \
--to=karthik.188@gmail.com \
--cc=git@vger.kernel.org \
--cc=sunshine@sunshineco.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.