Tanay Abhra <tanayabh@xxxxxxxxx> writes: > If a callback returns a negative value to `git_config*()` family, > they call `die()` while printing the line number and the file name. > Currently the printed line number is off by one, thus printing the > wrong line number. > > Make `linenr` point to the line we just parsed during the call > to callback to get accurate line number in error messages. > > Discovered-by: Tanay Abhra <tanayabh@xxxxxxxxx> > Signed-off-by: Matthieu Moy <Matthieu.Moy@xxxxxxxxxxxxxxx> Thanks. I am not sure what to read in these two lines. Was the fix done by you or Matthieu? > --- > config.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/config.c b/config.c > index 22971e9..6db8f97 100644 > --- a/config.c > +++ b/config.c > @@ -244,6 +244,7 @@ static int get_next_char(void) > cf->linenr++; > if (c == EOF) { > cf->eof = 1; > + cf->linenr++; > c = '\n'; > } > return c; > @@ -319,6 +320,7 @@ static int get_value(config_fn_t fn, void *data, struct strbuf *name) > { > int c; > char *value; > + int ret; > > /* Get the full name */ > for (;;) { > @@ -341,7 +343,15 @@ static int get_value(config_fn_t fn, void *data, struct strbuf *name) > if (!value) > return -1; > } > - return fn(name->buf, value, data); > + /* > + * We already consumed the \n, but we need linenr to point to > + * the line we just parsed during the call to fn to get > + * accurate line number in error messages. > + */ > + cf->linenr--; > + ret = fn(name->buf, value, data); > + cf->linenr++; > + return ret; > } > > static int get_extended_base_var(struct strbuf *name, int c) -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html