From: Junio C Hamano <gitster@pobox.com>
To: Karthik Nayak <karthik.188@gmail.com>
Cc: git@vger.kernel.org, sunshine@sunshineco.com, Jeff King <peff@peff.net>
Subject: Re: [PATCH v8 1/4] sha1_file.c: support reading from a loose object of unknown type
Date: Wed, 15 Apr 2015 13:21:15 -0700 [thread overview]
Message-ID: <xmqqmw29jg78.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: 1429117143-4882-1-git-send-email-karthik.188@gmail.com
Karthik Nayak <karthik.188@gmail.com> writes:
> Update sha1_loose_object_info() to optionally allow it to read
> from a loose object file of unknown/bogus type; as the function
> usually returns the type of the object it read in the form of enum
> for known types, add an optional "typename" field to receive the
> name of the type in textual form and a flag to indicate the reading
> of a loose object file of unknown/bogus type.
>
> Add parse_sha1_header_extended() which acts as a wrapper around
> parse_sha1_header() allowing more information to be obtained.
>
> Add unpack_sha1_header_to_strbuf() to unpack sha1 headers of
> unknown/corrupt objects which have a unknown sha1 header size to
> a strbuf structure. This was written by Junio C Hamano but tested
> by me.
>
> Helped-by: Junio C Hamano <gitster@pobox.com>
> Helped-by: Eric Sunshine <sunshine@sunshineco.com>
> Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
> ---
I see that you made the type parsing to happen earlier than the
previous round (which used to do the size first and then type).
Not a problem, though. Just something I noticed...
> @@ -1614,27 +1642,40 @@ static void *unpack_sha1_rest(git_zstream *stream, void *buffer, unsigned long s
> * too permissive for what we want to check. So do an anal
> * object header parse by hand.
> */
> -int parse_sha1_header(const char *hdr, unsigned long *sizep)
> +int parse_sha1_header_extended(const char *hdr, struct object_info *oi,
> + unsigned int flags)
> {
> - char type[10];
> - int i;
> + struct strbuf typename = STRBUF_INIT;
> unsigned long size;
> + int type;
>
> /*
> * The type can be at most ten bytes (including the
> * terminating '\0' that we add), and is followed by
> * a space.
> */
> - i = 0;
> for (;;) {
> char c = *hdr++;
> if (c == ' ')
> break;
> - type[i++] = c;
> - if (i >= sizeof(type))
> - return -1;
> + strbuf_addch(&typename, c);
> }
> - type[i] = 0;
This _might_ have some performance impact in that strbuf_addch()
involves strbuf_grow(*, 1), which does "does it overflow to
increment sb->len by one?"; I would say it should be unmeasurable
because the function is expected to be used only on loose objects
and you shouldn't have very many of them without packing in your
repository in the first place.
I guess Peff's c1822d4f (strbuf: add an optimized 1-character
strbuf_grow, 2015-04-04) may want to teach strbuf_addch() to use his
new strbuf_grow_ch(), and once that happens the performance worry
would disappear without this code to be changed at all.
> @@ -2541,7 +2596,7 @@ static int sha1_loose_object_info(const unsigned char *sha1,
> * return value implicitly indicates whether the
> * object even exists.
> */
> - if (!oi->typep && !oi->sizep) {
> + if (!oi->typep && !oi->typename && !oi->sizep) {
You didn't have this check in the earlier round, and this new one is
correct, I think. Good eyes to spot this potential problem.
Thanks.
next prev parent reply other threads:[~2015-04-15 20:21 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-15 16:55 [PATCH v8 0/4] cat-file: teach cat-file a '--literally' option karthik nayak
2015-04-15 16:59 ` [PATCH v8 1/4] sha1_file.c: support reading from a loose object of unknown type Karthik Nayak
2015-04-15 20:21 ` Junio C Hamano [this message]
2015-04-15 22:18 ` Jeff King
2015-04-17 14:23 ` Jeff King
2015-04-17 16:21 ` Junio C Hamano
2015-04-17 20:51 ` Jeff King
2015-04-17 21:10 ` Junio C Hamano
2015-04-20 18:43 ` karthik nayak
2015-04-20 18:51 ` Jeff King
2015-04-21 11:26 ` karthik nayak
2015-04-21 14:24 ` Jeff King
2015-04-17 18:45 ` karthik nayak
2015-04-17 18:49 ` Jeff King
2015-04-18 8:31 ` karthik nayak
2015-04-17 19:23 ` Junio C Hamano
2015-04-18 8:32 ` karthik nayak
2015-04-17 23:31 ` Eric Sunshine
2015-04-18 9:03 ` karthik nayak
2015-04-15 16:59 ` [PATCH v8 2/4] cat-file: teach cat-file a '--literally' option Karthik Nayak
2015-04-15 20:20 ` Junio C Hamano
2015-04-15 20:52 ` Junio C Hamano
2015-04-16 7:26 ` karthik nayak
2015-04-16 13:35 ` Junio C Hamano
2015-04-17 2:10 ` Karthik Nayak
2015-04-17 2:14 ` Junio C Hamano
2015-04-19 0:28 ` Charles Bailey
2015-04-20 5:30 ` Junio C Hamano
2015-04-20 7:44 ` Charles Bailey
2015-04-20 8:57 ` Karthik Nayak
2015-04-20 9:19 ` Charles Bailey
2015-04-20 15:52 ` karthik nayak
2015-04-21 10:16 ` Charles Bailey
2015-04-21 19:40 ` Eric Sunshine
2015-04-21 20:36 ` Junio C Hamano
2015-04-25 11:22 ` karthik nayak
2015-04-25 17:04 ` Junio C Hamano
2015-04-27 11:57 ` karthik nayak
2015-04-27 18:38 ` Eric Sunshine
2015-04-28 12:03 ` karthik nayak
2015-04-15 17:00 ` [PATCH v8 3/4] cat-file: add documentation for " Karthik Nayak
2015-04-15 17:00 ` [PATCH v8 4/4] t1006: add tests for git cat-file --literally Karthik Nayak
2015-04-18 0:00 ` Eric Sunshine
2015-04-18 5:22 ` karthik nayak
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=xmqqmw29jg78.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=karthik.188@gmail.com \
--cc=peff@peff.net \
--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.