Unexpected crashes in SetData method of ExtendedUnixData
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 55/100
Direção de pesquisa
Comece em src/ICSharpCode.SharpZipLib/Zip/ZipExtraData.cs, em ExtendedUnixData.SetData, e depois use os dois casos de teste reproduzíveis da issue para count igual a zero e index igual a count. Está concluído quando ambos os casos não lançarem mais exceções e o método tratar a entrada vazia como uma operação no-op ou documentar as restrições caso essa abordagem seja escolhida.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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
- Linguagem predominante
- C#
- Estrelas
- 3.9k
- Forks
- 1k
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Preparar o ambiente
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 icsharpcode/SharpZipLib
-
*no response* bug
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 78/100
icsharpcode/SharpZipLib#905 · 1 comentário ·
-
bug bzip2
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 45/100
icsharpcode/SharpZipLib#904 ·
-
SetLevel in ZipFileAbertaenhancement zip
Dificuldade 2/5 1-2 dias Facilidade para iniciantes 55/100
icsharpcode/SharpZipLib#903 ·
-
*no response* bug
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 32/100
icsharpcode/SharpZipLib#901 · 1 comentário ·
-
*no response* bug
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 35/100
icsharpcode/SharpZipLib#894 · 1 comentário ·
Todas as issues de icsharpcode/SharpZipLib
Issues semelhantes
-
.NET bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 86/100
RayWangQvQ/BiliBiliToolPro#1144 ·
Mantenedores costumam responder em até 1 dia
-
area-System.Numerics.Tensors untriaged
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
dotnet/runtime#134691 · 2 comentários ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 86/100
microsoft/DataFactory.MCP#121 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
unoplatform/uno.templates#2277 ·
Mantenedores costumam responder em até 5 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
microsoft/fluentui-blazor#5344 · 1 comentário ·
Mantenedores costumam responder em até 1 dia