All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Jonathan Tan <jonathantanmy@google.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] fetch-pack: make unexpected peek result non-fatal
Date: Mon, 16 May 2022 09:10:40 -0700	[thread overview]
Message-ID: <xmqqr14t4fwf.fsf@gitster.g> (raw)
In-Reply-To: <20220516110221.3490982-1-jonathantanmy@google.com> (Jonathan Tan's message of "Mon, 16 May 2022 04:02:20 -0700")

Jonathan Tan <jonathantanmy@google.com> writes:

> When a Git server responds to a fetch request, it may send optional
> sections before the packfile section. To handle this, the Git client
> calls packet_reader_peek() (see process_section_header()) in order to
> see what's next without consuming the line.
>
> However, as implemented, Git errors out whenever what's peeked is not an
> ordinary line. This is not only unexpected (here, we only need to know
> whether the upcoming line is the section header we want) but causes
> errors to include the name of a section header that is irrelevant to the
> cause of the error. For example, at $DAYJOB, we have seen "fatal: error
> reading section header 'shallow-info'" error messages when none of the
> repositories involved are shallow.
>
> Therefore, fix this so that the peek returns 1 if the upcoming line is
> the wanted section header and nothing else. Because of this change,
> reader->line may now be NULL later in the function, so update the error
> message printing code accordingly.

[not a suggestion to change anything; just making sure I got the
above correct]

We used to die unless READ_NORMAL was returned, so the code after
packet_reader_peek() can rely on reader->line to be populated.  Now
that code must handle cases where an earlier _peek() gave something
other than READ_NORMAL and in such an error case reader->line points
at NULL.  So any code that assumed reader->line was populated needs
to be updated.

Makes sense.

> Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
> ---
>  fetch-pack.c | 19 +++++++++++--------
>  1 file changed, 11 insertions(+), 8 deletions(-)
>
> diff --git a/fetch-pack.c b/fetch-pack.c
> index 4e1e88eea0..6d0d271259 100644
> --- a/fetch-pack.c
> +++ b/fetch-pack.c
> @@ -1370,17 +1370,20 @@ static int send_fetch_request(struct fetch_negotiator *negotiator, int fd_out,
>  static int process_section_header(struct packet_reader *reader,
>  				  const char *section, int peek)
>  {
> -	int ret;
> -
> -	if (packet_reader_peek(reader) != PACKET_READ_NORMAL)
> -		die(_("error reading section header '%s'"), section);
> +	int ret = 0;
>  
> -	ret = !strcmp(reader->line, section);
> +	if (packet_reader_peek(reader) == PACKET_READ_NORMAL &&
> +	    !strcmp(reader->line, section))
> +		ret = 1;
>  
>  	if (!peek) {
> -		if (!ret)
> -			die(_("expected '%s', received '%s'"),
> -			    section, reader->line);
> +		if (!ret) {
> +			if (reader->line)
> +				die(_("expected '%s', received '%s'"),
> +				    section, reader->line);
> +			else
> +				die(_("expected '%s'"), section);
> +		}
>  		packet_reader_read(reader);
>  	}

  reply	other threads:[~2022-05-16 16:10 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-16 11:02 [PATCH] fetch-pack: make unexpected peek result non-fatal Jonathan Tan
2022-05-16 16:10 ` Junio C Hamano [this message]
2022-05-17  6:20   ` Jonathan Tan

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=xmqqr14t4fwf.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=jonathantanmy@google.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.