Merge branch 'jk/config-no-ungetc-eof' into maint
Reading configuration from a blob object, when it ends with a lone CR, use to confuse the configuration parser. * jk/config-no-ungetc-eof: config_buf_ungetc: warn when pushing back a random character config: do not ungetc EOF
This commit is contained in:
commit
2250406bfd
11
config.c
11
config.c
@ -73,8 +73,12 @@ static int config_buf_fgetc(struct config_source *conf)
|
||||
|
||||
static int config_buf_ungetc(int c, struct config_source *conf)
|
||||
{
|
||||
if (conf->u.buf.pos > 0)
|
||||
return conf->u.buf.buf[--conf->u.buf.pos];
|
||||
if (conf->u.buf.pos > 0) {
|
||||
conf->u.buf.pos--;
|
||||
if (conf->u.buf.buf[conf->u.buf.pos] != c)
|
||||
die("BUG: config_buf can only ungetc the same character");
|
||||
return c;
|
||||
}
|
||||
|
||||
return EOF;
|
||||
}
|
||||
@ -235,7 +239,8 @@ static int get_next_char(void)
|
||||
/* DOS like systems */
|
||||
c = cf->do_fgetc(cf);
|
||||
if (c != '\n') {
|
||||
cf->do_ungetc(c, cf);
|
||||
if (c != EOF)
|
||||
cf->do_ungetc(c, cf);
|
||||
c = '\r';
|
||||
}
|
||||
}
|
||||
|
@ -67,4 +67,13 @@ test_expect_success 'parse errors in blobs are properly attributed' '
|
||||
grep "HEAD:config" err
|
||||
'
|
||||
|
||||
test_expect_success 'can parse blob ending with CR' '
|
||||
printf "[some]key = value\\r" >config &&
|
||||
git add config &&
|
||||
git commit -m CR &&
|
||||
echo value >expect &&
|
||||
git config --blob=HEAD:config some.key >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Loading…
Reference in New Issue
Block a user