GitRepositoryName carries only [HasNonWhitespaceContent], so a name containing /, ?, or .. passes validation.
The two providers handle that inconsistently. AzureDevOpsProvider runs Uri.EscapeDataString over the organization, project, and repository before building a URL. GitHubProvider hands the raw value to Octokit, which formats it into a relative URI without escaping. A name containing a separator can therefore reshape the request path.
This is not a vulnerability, because the caller is the trusting party and the blast radius is a request to a different URL under the caller's own credentials. It is an inconsistency worth closing, and a validated type would fix both sites at the source rather than at each use.
Related to the containment guard added in #80, which handles the same class of input for local paths.
GitRepositoryNamecarries only[HasNonWhitespaceContent], so a name containing/,?, or..passes validation.The two providers handle that inconsistently.
AzureDevOpsProviderrunsUri.EscapeDataStringover the organization, project, and repository before building a URL.GitHubProviderhands the raw value to Octokit, which formats it into a relative URI without escaping. A name containing a separator can therefore reshape the request path.This is not a vulnerability, because the caller is the trusting party and the blast radius is a request to a different URL under the caller's own credentials. It is an inconsistency worth closing, and a validated type would fix both sites at the source rather than at each use.
Related to the containment guard added in #80, which handles the same class of input for local paths.