• Show log

    Commit

  • Hash : 93a9044f
    Author : Patrick Steinhardt
    Date : 2020-01-31T08:49:34

    fetchhead: strip credentials from remote URL
    
    If fetching from an anonymous remote via its URL, then the URL gets
    written into the FETCH_HEAD reference. This is mainly done to give
    valuable context to some commands, like for example git-merge(1), which
    will put the URL into the generated MERGE_MSG. As a result, what gets
    written into FETCH_HEAD may become public in some cases. This is
    especially important considering that URLs may contain credentials, e.g.
    when cloning 'https://foo:bar@example.com/repo' we persist the complete
    URL into FETCH_HEAD and put it without any kind of sanitization into the
    MERGE_MSG. This is obviously bad, as your login data has now just leaked
    as soon as you do git-push(1).
    
    When writing the URL into FETCH_HEAD, upstream git does strip
    credentials first. Let's do the same by trying to parse the remote URL
    as a "real" URL, removing any credentials and then re-formatting the
    URL. In case this fails, e.g. when it's a file path or not a valid URL,
    we just fall back to using the URL as-is without any sanitization. Add
    tests to verify our behaviour.