Browse Source

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
maint
Junio C Hamano 10 years ago
parent
commit
2250406bfd
  1. 11
      config.c
  2. 9
      t/t1307-config-blob.sh

11
config.c

@ -73,8 +73,12 @@ static int config_buf_fgetc(struct config_source *conf) @@ -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) @@ -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';
}
}

9
t/t1307-config-blob.sh

@ -67,4 +67,13 @@ test_expect_success 'parse errors in blobs are properly attributed' ' @@ -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…
Cancel
Save