Merge branch 'ms/maint-config-error-at-eol-linecount' into maint

* ms/maint-config-error-at-eol-linecount:
  config: report errors at the EOL with correct line number
This commit is contained in:
Junio C Hamano 2012-03-26 12:10:05 -07:00
commit ed6ce4382b
2 changed files with 40 additions and 4 deletions

View File

@ -135,8 +135,10 @@ static char *parse_value(void)
for (;;) { for (;;) {
int c = get_next_char(); int c = get_next_char();
if (c == '\n') { if (c == '\n') {
if (quote) if (quote) {
cf->linenr--;
return NULL; return NULL;
}
return cf->value.buf; return cf->value.buf;
} }
if (comment) if (comment)
@ -226,7 +228,7 @@ static int get_extended_base_var(char *name, int baselen, int c)
{ {
do { do {
if (c == '\n') if (c == '\n')
return -1; goto error_incomplete_line;
c = get_next_char(); c = get_next_char();
} while (isspace(c)); } while (isspace(c));
@ -238,13 +240,13 @@ static int get_extended_base_var(char *name, int baselen, int c)
for (;;) { for (;;) {
int c = get_next_char(); int c = get_next_char();
if (c == '\n') if (c == '\n')
return -1; goto error_incomplete_line;
if (c == '"') if (c == '"')
break; break;
if (c == '\\') { if (c == '\\') {
c = get_next_char(); c = get_next_char();
if (c == '\n') if (c == '\n')
return -1; goto error_incomplete_line;
} }
name[baselen++] = c; name[baselen++] = c;
if (baselen > MAXNAME / 2) if (baselen > MAXNAME / 2)
@ -255,6 +257,9 @@ static int get_extended_base_var(char *name, int baselen, int c)
if (get_next_char() != ']') if (get_next_char() != ']')
return -1; return -1;
return baselen; return baselen;
error_incomplete_line:
cf->linenr--;
return -1;
} }
static int get_base_var(char *name) static int get_base_var(char *name)

View File

@ -960,4 +960,35 @@ test_expect_success 'git -c complains about empty key and value' '
test_must_fail git -c "" rev-parse test_must_fail git -c "" rev-parse
' '
# malformed configuration files
test_expect_success 'barf on syntax error' '
cat >.git/config <<-\EOF &&
# broken section line
[section]
key garbage
EOF
test_must_fail git config --get section.key >actual 2>error &&
grep " line 3 " error
'
test_expect_success 'barf on incomplete section header' '
cat >.git/config <<-\EOF &&
# broken section line
[section
key = value
EOF
test_must_fail git config --get section.key >actual 2>error &&
grep " line 2 " error
'
test_expect_success 'barf on incomplete string' '
cat >.git/config <<-\EOF &&
# broken section line
[section]
key = "value string
EOF
test_must_fail git config --get section.key >actual 2>error &&
grep " line 3 " error
'
test_done test_done