create_or_update_file writes to the wrong file when the path contains # or ?
Mantenedores costumam responder em até 4 dias
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 84/100
Direção de pesquisa
Comece em pkg/github/repositories.go em CreateOrUpdateFile (v1.14.0 / 71ef8266), onde a chamada CreateFile passa path sem escape, e leia escapeGitTreeish como o padrão existente de escape por segmento. Compare com as verificações de existência e symlink baseadas em GetContents, que já escapam corretamente. O resultado esperado é PUT /repos/{owner}/{repo}/contents/docs/C%23/intro.md em um servidor mock, além de um teste de regressão (estenda o arquivo de testes repositories existente) que garanta que os caminhos # e ? sejam gravados no arquivo correto.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Describe the bug
create_or_update_file with path: "docs/C#/intro.md" commits the content to a file named docs/C and reports success. A ? does the same (notes/what?.md is written as notes/what).
The path goes into the request URL unescaped: go-github's RepositoriesService.CreateFile builds repos/{owner}/{repo}/contents/{path} with no escaping, so everything from # on becomes a URL fragment and everything from ? on becomes a query string. The checks that run first (the existing-file / SHA lookup and the symlink check) go through GetContents, which does escape the path, so they look at the right file while the write goes to another.
Affected version
v1.14.0 and main at 71ef8266 (pkg/github/repositories.go, the CreateFile call in CreateOrUpdateFile).
Steps to reproduce the behavior
- Call
create_or_update_fileon a test repository:{"owner":"<you>","repo":"<test repo>","path":"docs/C#/intro.md","content":"# Intro","message":"Add intro","branch":"main"} - Look at the commit.
Expected vs actual behavior
Expected: a file at docs/C#/intro.md (the request goes to PUT /repos/<you>/<test repo>/contents/docs/C%23/intro.md).
Actual: the request goes to PUT /repos/<you>/<test repo>/contents/docs/C, the commit creates a file named docs/C, and the tool result reports success with "path": "docs/C". If docs/C already exists as a file, it is overwritten.
Logs
Request seen by a mock server for the call above:
GET /repos/owner/repo/contents/docs/C%23/intro.md -> 404 (existence check, escaped)
PUT /repos/owner/repo/contents/docs/C (the write, unescaped)
I have a small fix with a regression test ready and can open a PR: escape each path segment before calling CreateFile, the same way escapeGitTreeish already does for tree lookups.
- Linguagem predominante
- Go
- Estrelas
- 33.4k
- Forks
- 5.1k
- Merge médio
- 2d 9h
- PRs com merge (30d)
- 34
Preparar o ambiente
- Inclui um Dockerfile ou arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de github/github-mcp-server
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
github/github-mcp-server#3475 ·
Mantenedores costumam responder em até 4 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
github/github-mcp-server#3450 ·
Mantenedores costumam responder em até 4 dias
-
request ai review
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
github/github-mcp-server#3439 ·
Mantenedores costumam responder em até 4 dias
-
get_job_logs with failed_only misses failed jobs after the first 30 jobs of a runTalvez já em andamento @jayhemnani9910 assumiu há 5 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
github/github-mcp-server#3428 ·
Mantenedores costumam responder em até 4 dias
-
pull_request_read drops merge_commit_shaTalvez já em andamento @thejdubb02 assumiu há 34 dias. Abertabug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
github/github-mcp-server#3235 · 1 comentário ·
Mantenedores costumam responder em até 4 dias
Todas as issues de github/github-mcp-server
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
Mantenedores costumam responder em até 1 dia
-
[Bug] Extraction-mode autogen returns pod templates in random order for map-keyed CRDs, so deny and report messages change between runsTalvez já em andamento @ManojLamani assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
kyverno/kyverno#17980 · 1 reação ·
Mantenedores costumam responder em até 1 dia
-
raised-by:reviewer
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 84/100
medici-finance/assay#2681 ·
Mantenedores costumam responder em até 1 dia
-
bug triaged
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
fullsend-ai/fullsend#8353 · 4 comentários · 1 reação ·
Mantenedores costumam responder em até 1 dia
-
duplication
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
openvibely/openvibely#1459 ·
Mantenedores costumam responder em até 2 dias