Skip to content

GitConfigParser misparses quotes in options #1923

@cjwatson

Description

@cjwatson

My ~/.gitconfig starts like this:

[user]
        name = "Colin Watson"
        email = "[email protected]"

It's been like that for a long time, so I don't remember whether an old version of git config wrote it like that, or whether I put it there by hand. Anyway, git itself has always been fine with this. The relevant part of git-config(1) says:

A line that defines a value can be continued to the next line by ending it with a ; the backslash and the end-of-line are stripped. Leading whitespaces after name =, the remainder of the line after the first comment character # or ;, and trailing whitespaces of the line are discarded unless they are enclosed in double quotes. Internal whitespaces within the value are retained verbatim.

Inside double quotes, double quote " and backslash \ characters must be escaped: use " for " and \ for .

The following escape sequences (beside " and \) are recognized: \n for newline character (NL), \t for horizontal tabulation (HT, TAB) and \b for backspace (BS). Other char escape sequences (including octal escape sequences) are invalid.

But when I create a commit using IndexFile.commit(), I get this in the commit metadata, which I'm pretty sure is malformed:

Author: "Colin Watson" <"[email protected]">

I think GitConfigParser should match the parsing rules that git config follows.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions