ZipArchive.TestArchive swallows important environmental exceptions
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 45/100
Línea de trabajo
Empieza en ZipFile.TestArchive e inspecciona cómo se gestionan las excepciones de la verificación del archivo. Reproduce el comportamiento con el proyecto de .NET Framework 4.8 proporcionado bajo presión de memoria; se considera terminado cuando una OutOfMemoryException se propaga en lugar de convertirse en un resultado false.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Steps to reproduce
Call ZipFile.TestArchive when the application is under severe memory pressure.
Expected behavior
An OutOfMemoryException is thrown by the runtime and leaks out of SharpZipLib.
Actual behavior
SharpZipLib swallows the OutOfMemoryException and TestArchive returns false, leading people to believe that there is a problem with the ZIP file, rather than the runtime.
Version of SharpZipLib
v1.3.3.
Obtained from (only keep the relevant lines)
Package installed using NuGet
Repro case:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net48</TargetFramework>
<RootNamespace>TestZipFile</RootNamespace>
<Nullable>enable</Nullable>
<LangVersion>10</LangVersion>
<Platform>x86</Platform>
<PlatformTarget>x86</PlatformTarget>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="SharpZipLib" Version="1.3.3" />
</ItemGroup>
</Project>
using ICSharpCode.SharpZipLib.Zip;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
namespace TestZipFile
{
public static class Program
{
public static int Main(string[] args)
{
if (args.Length != 1)
{
Console.WriteLine($"Usage: test-zip.exe <path to zip file>");
return -1;
}
Console.WriteLine($"Process architecture: {RuntimeInformation.ProcessArchitecture}");
using var fs = File.OpenRead(args[0]);
using var zip = new ZipFile(fs);
var list = new List<byte[]>(capacity: 20);
var increment = 1_000_000_000;
Console.WriteLine("Reserving memory...");
while (true)
{
try
{
var data = new byte[increment];
list.Add(data);
}
catch (OutOfMemoryException)
{
if (increment > 10_000)
{
increment = increment / 10;
}
else
{
break;
}
}
}
Console.WriteLine($"Reserved {list.Sum(static x => x.Length)} bytes.");
AppDomain.CurrentDomain.FirstChanceException += (sender, e) =>
{
if (e.Exception is OutOfMemoryException)
{
list.Clear();
GC.Collect();
}
};
Console.WriteLine($"Verifying zip...");
Console.WriteLine("---");
Console.WriteLine();
var result = zip.TestArchive(testData: true, TestStrategy.FindAllErrors, static (status, message) => { });
GC.KeepAlive(list);
Console.WriteLine("---");
Console.WriteLine($"Result: {(result ? "PASS" : "FAIL")}");
return result ? 0 : -2;
}
}
}
- Lenguaje dominante
- C#
- Estrellas
- 3.9k
- Forks
- 1k
- Métricas de merge de PR
- Sin PR fusionados en 30 d
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.
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 ZipFile Abiertoenhancement 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 frontend good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
NavigationViewItemAutomationPeer implements IInvokeProvider but never advertises the Invoke pattern Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
unoplatform/uno#24629 ·
-
agentic-workflows Needs: Triage :mag: State: In-PR
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
CS0162 "Unreachable code detected" warning from a MSBuildTemp .tmp file in every game project Abiertobug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
-
Type: enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
apache/arrow-adbc#4809 ·