git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: Jeff King <peff@peff.net>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH v2 2/8] config: report correct line number upon error
Date: Tue, 13 Jun 2017 13:02:49 +0200 (CEST)	[thread overview]
Message-ID: <alpine.DEB.2.21.1.1706131256400.171564@virtualbox> (raw)
In-Reply-To: <20170610090424.zibu4sgd2lr7ghfk@sigill.intra.peff.net>

Hi Peff,

On Sat, 10 Jun 2017, Jeff King wrote:

> On Thu, Jun 08, 2017 at 09:53:35PM +0200, Johannes Schindelin wrote:
> 
> > When get_value() parses a key/value pair, it is possible that the line
> > number is decreased (because the \n has been consumed already) before the
> > key/value pair is passed to the callback function, to allow for the
> > correct line to be attributed in case of an error.
> > 
> > However, when git_parse_source() asks get_value() to parse the key/value
> > pair, the error reporting is performed *after* get_value() returns.
> > 
> > Which means that we have to be careful not to increase the line number
> > in get_value() after the callback function returned an error.
> 
> Good catch. Would we want a test here, like:
> 
> diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh
> index 13b7851f7..4cad8366a 100755
> --- a/t/t1300-repo-config.sh
> +++ b/t/t1300-repo-config.sh
> @@ -703,6 +703,12 @@ test_expect_success 'invalid unit' '
>  	test_i18ngrep "bad numeric config value .1auto. for .aninvalid.unit. in file .git/config: invalid unit" actual
>  '
>  
> +test_expect_success 'invalid path' '
> +	echo "[bool]var" >invalid &&
> +	test_must_fail git config -f invalid --path bool.var 2>actual &&
> +	test_i18ngrep "line 1" actual
> +'
> +
>  test_expect_success 'invalid stdin config' '
>  	echo "[broken" | test_must_fail git config --list --file - >output 2>&1 &&
>  	test_i18ngrep "bad config line 1 in standard input" output
> 
> which currently reports "line 2" instead of line 1.

Mmmmkay.

I am always reluctant to add *even more* stuff to the test suite, in
particular since my patch series implicitly changes t1308 to test for this
very thing.

But I guess my fight against the test suite taking longer and longer and
longer is a fight I must lose, as I am pretty alone in that endeavor, and
would have have to fight fellow developers. So I guess it is time to give
up.

I added the test case you suggested, with a title that I find a bit more
descriptive.

> I wondered if the same bug could be found earlier (e.g,. from
> parse_value() when it sees an unpaired quote), but it looks like we do a
> cf->linenr-- rollback there already.

Right.

The underlying bug, of course, is that we use a different machinery to
handle cached vs non-cached config, but that is a different story.

> > diff --git a/config.c b/config.c
> > index 146cb3452ad..9b88531a70d 100644
> > --- a/config.c
> > +++ b/config.c
> > @@ -604,7 +604,8 @@ static int get_value(config_fn_t fn, void *data, struct strbuf *name)
> >  	 */
> >  	cf->linenr--;
> >  	ret = fn(name->buf, value, data);
> > -	cf->linenr++;
> > +	if (!ret)
> > +		cf->linenr++;
> >  	return ret;
> >  }
> 
> I think this should be "if (ret < 0)". The caller only considers it an
> error if get_value() returns a negative number. As you have it here, I
> think a config callback which returned a positive number would end up
> with nonsense line numbers.

I think you are half-correct: it should be `if (ret >= 0)` (the linenr
needs to be modified back in case of success, not in case of failure, in
case of failure there will be some reporting going on that needs the same
line number as `fn()` had seen).

Ciao,
Dscho

  reply	other threads:[~2017-06-13 11:03 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-08 19:53 [PATCH v2 0/8] Avoid problem where git_dir is set after alias expansion Johannes Schindelin
2017-06-08 19:53 ` [PATCH v2 1/8] discover_git_directory(): avoid setting invalid git_dir Johannes Schindelin
2017-06-10  8:40   ` Jeff King
2017-06-08 19:53 ` [PATCH v2 2/8] config: report correct line number upon error Johannes Schindelin
2017-06-10  9:04   ` Jeff King
2017-06-13 11:02     ` Johannes Schindelin [this message]
2017-06-13 11:28       ` Jeff King
2017-06-08 19:53 ` [PATCH v2 3/8] help: use early config when autocorrecting aliases Johannes Schindelin
2017-06-10  9:05   ` Jeff King
2017-06-08 19:53 ` [PATCH v2 4/8] read_early_config(): optionally return the worktree's top-level directory Johannes Schindelin
2017-06-10  9:44   ` Jeff King
2017-06-08 19:53 ` [PATCH v2 5/8] t1308: relax the test verifying that empty alias values are disallowed Johannes Schindelin
2017-06-10  4:29   ` Junio C Hamano
2017-06-13 10:50     ` Johannes Schindelin
2017-06-13 12:59       ` Junio C Hamano
2017-06-08 19:53 ` [PATCH v2 6/8] t7006: demonstrate a problem with aliases in subdirectories Johannes Schindelin
2017-06-08 19:53 ` [PATCH v2 7/8] alias_lookup(): optionally return top-level directory Johannes Schindelin
2017-06-10 10:18   ` Jeff King
2017-06-13 11:21     ` Johannes Schindelin
2017-06-13 11:29       ` Jeff King
2017-06-13 11:42       ` Johannes Schindelin
2017-06-13 11:42         ` Jeff King
2017-06-13 16:40           ` Junio C Hamano
2017-06-14  6:02             ` Jeff King
2017-06-14 10:03             ` Johannes Schindelin
2017-06-08 19:53 ` [PATCH v2 8/8] Use the early config machinery to expand aliases Johannes Schindelin
2017-06-10 10:07   ` Jeff King
2017-06-10 10:10     ` Jeff King
2017-06-12 20:43       ` Junio C Hamano
2017-06-13 11:25     ` Johannes Schindelin
2017-06-13 11:30       ` Jeff King
2017-06-08 22:32 ` [PATCH v2 0/8] Avoid problem where git_dir is set after alias expansion Brandon Williams

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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.DEB.2.21.1.1706131256400.171564@virtualbox \
    --to=johannes.schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=peff@peff.net \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).