Unexpected crashes in SetData method of ExtendedUnixData
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 55/100
Línea de trabajo
Comienza en src/ICSharpCode.SharpZipLib/Zip/ZipExtraData.cs, en ExtendedUnixData.SetData, y utiliza después los dos casos de prueba reproducibles del issue para count igual a cero e index igual a count. Se considera terminado cuando ninguno de los dos casos vuelve a lanzar una excepción y el método trata la entrada vacía como una operación no-op o documenta las restricciones si se elige ese enfoque.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Describe the bug
Hi :)
The SetData method in Zip/ZipExtraData.cs crashes with a System.IO.EndOfStreamException in two specific scenarios:
- when
countis set to 0 - when
indexis equal tocount
In both cases, the documentation does not indicate that these inputs are invalid.
I think, based on the documentation and signature, one would expect no operation to occur for these cases, as there is no data to process.
Steps to reproduce
The following two test cases can be used to demonstrate the behavior.
As of right now, they would both fail.
[Test]
public void SetDataCountZero()
{
var extendedUnixData = new ExtendedUnixData();
byte[] data = new byte[] { 1, 2, 3, 4 };
int index = 0;
int count = 0; // Nothing available to be read
Assert.DoesNotThrow(() => extendedUnixData.SetData(data, index, count));
}
[Test]
public void SetDataOffsetAndCountEqual()
{
var extendedUnixData = new ExtendedUnixData();
byte[] data = new byte[] { 1, 2, 3, 4 };
int index = 4;
int count = 4;
Assert.DoesNotThrow(() => extendedUnixData.SetData(data, index, count));
}
Expected behavior
I would expect the method to handle this gracefully and perform no operation.
I recommend that either,
1. the implementation is updated to handle these edge cases (e.g. return without reading from stream)
or
2. the documentation is adjusted to explicitly describe these constraints.
For 1., a simple check paired with an early return would do the trick:
/// <summary>
/// Set the data from the raw values provided.
/// </summary>
/// <param name = "data">The raw data to extract values from.</param>
/// <param name = "index">The index to start extracting values from.</param>
/// <param name = "count">The number of bytes available.</param>
public void SetData(byte[] data, int index, int count)
{
if (count == 0 || index == count)
return;
using (MemoryStream ms = new MemoryStream(data, index, count, false))
{ ... }
}
Operating System
macOS
Framework Version
.NET 6
Tags
ZIP
Additional context
No response
- Lenguaje dominante
- C#
- Estrellas
- 3.9k
- Forks
- 1k
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
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.
Más de icsharpcode/SharpZipLib
-
*no response* bug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
icsharpcode/SharpZipLib#905 · 1 comentario ·
-
bug bzip2
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
icsharpcode/SharpZipLib#904 ·
-
SetLevel in ZipFileAbiertoenhancement zip
Dificultad 2/5 1-2 días Aptitud para principiantes 55/100
icsharpcode/SharpZipLib#903 ·
-
*no response* bug
Dificultad 4/5 3-5 días Aptitud para principiantes 32/100
icsharpcode/SharpZipLib#901 · 1 comentario ·
-
*no response* bug
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
icsharpcode/SharpZipLib#894 · 1 comentario ·
Todos los issues de icsharpcode/SharpZipLib
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
fluentassertions/fluentassertions#3353 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
-
Dificultad 2/5 Medio día Aptitud para principiantes 78/100
unoplatform/uno#24769 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
AvaloniaUI/Avalonia#22323 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
microsoft/onnxruntime-genai#2633 ·
Los mantenedores suelen responder en 1 día