libgit2 / libgit2/pygit2

Incorrectly decoded strings in Repository.path and Repository.workdir when using Python 3 on Windows

Aperta
#927 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
Python
Stelle
1.7k
Fork
408
Merge medio
2g 57m
PR unite (30g)
7

Descrizione

Example:

>import pygit2
>import sys
>r = pygit2.init_repository(r"C:\repösitory")
>r.path
'C:/repösitory/.git/' # this is a wrongly decoded path
>r.path.encode(sys.getfilesystemencoding()).decode("utf-8") # workaround
'C:/repösitory/.git/' # this looks right

Reproduced with "pygit2-0.28.2-cp35-cp35m-win32.whl".

The problem seems to be in "repository.c", function "Repository_path__get__":

return to_path(git_repository_path(self->repo));

The "to_path" function assumes that libgit2 returns a byte string with file system encoding:

#define to_path(x) to_unicode(x, Py_FileSystemDefaultEncoding, "strict")

But libgit2 actually returns a byte string encoded in UTF-8.
Maybe the behaviour of libgit2 has changed at some point?

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riproduci l'esempio Python 3 su Windows con un percorso del repository contenente caratteri non ASCII, quindi esamina repository.c, in particolare Repository_path__get__ e la definizione di to_path. Controlla sia Repository.path sia Repository.workdir e verifica che i percorsi restituiti conservino i caratteri originali senza la soluzione alternativa documentata.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
git, python
Ambito
backend
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.