rust-lang/git2-rs

Credentials helpers such as `git config credential.helper "store --file /path/to/credentials"` interpreted wrongly

Closed this issue · 0 comments

The implementation of CredentialsHelper::add_command of git2-rs is different from that of the git CLI.

While git2-rs checks whether a command contains a / or \ anywhere, the git CLI checks whether the command is an absolute path (roughly whether it starts with / or \)

Compare

git2-rs/src/cred.rs

Lines 302 to 303 in d1ae3b6

} else if cmd.contains("/") || cmd.contains("\\") {
self.commands.push(cmd.to_string());

with
https://github.com/git/git/blob/6a64ac7b014fa2cfa7a69af3c253bcd53a94b428/credential.c#L492-L493

This leads to rather surprise behaviour when using the store helper with a nontrivial --file argument. For example git config credential.helper "store --file /path/to/credentials" should be interpreted as git credential-store --file /path/to/credentials, but it is not .