libgit2 / libgit2/libgit2sharp
Crash calling Repository.IsValid with corrupt .git/config
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- C#
- Estrellas
- 3.5k
- Forks
- 925
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
Reproduction steps
Add this to .git/config
[diff "mytool"] command = c:\path\to\my\tool\MyToolComparer.exe
This will cause the following effect for git
c:\my\git\repo> git status
fatal: bad config line 8 in file .git/config
Then call Repository.IsValid(@"c:\my\git\repo\.git") which is turn calls Proxy.git_repository_open_ext(path, RepositoryOpenFlags.NoSearch, null);
This fails because the return value from NativeMethods.git_repository_open_ext(out repo, path, flags, ceilingDirs) is not checked for error prior to freeing the out parameter repo (which is already free'd when there is an error condition in int git_repository_open_ext(git_repository **repo_ptr, const char *start_path, unsigned int flags, const char *ceiling_dirs))
Expected behavior
LibGit2Sharp.LibGit2SharpException
Actual behavior
Access violation (0xC0000005) in void git_repository_free(git_repository *repo) when dereferencing the null repo
Version of LibGit2Sharp (release number or SHA1)
0.27.0.34
Operating system(s) tested; .NET runtime tested
Windows 10 Pro 1909 - .NET CLR Version v4.0.30319
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comience en Repository.IsValid y siga su llamada a través de Proxy.git_repository_open_ext hasta NativeMethods.git_repository_open_ext; después, inspeccione la ruta de error nativa que implica git_repository_free. Reproduzca el caso de un .git/config corrupto en Windows y verifique que produce LibGit2SharpException en lugar de una violación de acceso; añada o actualice la cobertura para este escenario si la estructura de pruebas existente indica una ubicación adecuada.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- csharp, git
- Área
- tooling
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 45/100