Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

Unexpected crashes in SetData method of ExtendedUnixData

Aberta
#887 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
55/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Estagnada
Stack de tecnologia
csharp
Domínio
tooling

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

*no response* bug zip
Describe the bug

Hi :)

The SetData method in Zip/ZipExtraData.cs crashes with a System.IO.EndOfStreamException in two specific scenarios:

  • when count is set to 0
  • when index is equal to count

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

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de icsharpcode/SharpZipLib

Todas as issues de icsharpcode/SharpZipLib

Issues semelhantes

Mais issues de C#

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.