Hang while opening BZip2 #638

Open
opened 2026-01-29 22:15:07 +00:00 by claunia · 0 comments
Owner

Originally created by @fuzzah on GitHub (May 15, 2024).

In continuation of #841.
The following code results in an infinite loop in SharpCompress:

using System.IO;
using SharpCompress.Readers;
Stream stream = new MemoryStream(new byte[] {0x42, 0x5a, 0x68, 0x34, 0x31, 0x41, 0x59, 0x26, 0x53, 0x59, 0x35});
ReaderFactory.Open(stream);

The stack trace (created with the dotnet stack tool):

System.Private.CoreLib!System.IO.Stream.ReadByte()
SharpCompress!SharpCompress.Compressors.BZip2.CBZip2InputStream.BsR(int32)
SharpCompress!SharpCompress.Compressors.BZip2.CBZip2InputStream.RecvDecodingTables()
SharpCompress!SharpCompress.Compressors.BZip2.CBZip2InputStream.GetAndMoveToFrontDecode()
SharpCompress!SharpCompress.Compressors.BZip2.CBZip2InputStream.InitBlock()
SharpCompress!SharpCompress.Compressors.BZip2.CBZip2InputStream..ctor(class System.IO.Stream,bool)
SharpCompress!SharpCompress.Compressors.BZip2.BZip2Stream..ctor(class System.IO.Stream,value class SharpCompress.Compressors.CompressionMode,bool)
SharpCompress!SharpCompress.Factories.TarFactory.TryOpenReader(class SharpCompress.IO.RewindableStream,class SharpCompress.Readers.ReaderOptions,class SharpCompress.Readers.IReader&)
SharpCompress!SharpCompress.Readers.ReaderFactory.Open(class System.IO.Stream,class SharpCompress.Readers.ReaderOptions)
app!Program.<Main>$(class System.String[])

This byte sequence written to a file gets detected as "bzip2 compressed data" by the file tool, but bzip2 fails to read it with the error message "bzip2: Compressed file ends unexpectedly".

Found by Linux Verification Center (linuxtesting.org) with AFL++ and SharpFuzz.
Reporter: Valery Korolyov (v.korolyov@gardatech.ru)
Organization: Garda Technologies (info@gardatech.ru)

Originally created by @fuzzah on GitHub (May 15, 2024). In continuation of #841. The following code results in an infinite loop in SharpCompress: ```csharp using System.IO; using SharpCompress.Readers; Stream stream = new MemoryStream(new byte[] {0x42, 0x5a, 0x68, 0x34, 0x31, 0x41, 0x59, 0x26, 0x53, 0x59, 0x35}); ReaderFactory.Open(stream); ``` The stack trace (created with the [`dotnet stack`](https://learn.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-stack) tool): ``` System.Private.CoreLib!System.IO.Stream.ReadByte() SharpCompress!SharpCompress.Compressors.BZip2.CBZip2InputStream.BsR(int32) SharpCompress!SharpCompress.Compressors.BZip2.CBZip2InputStream.RecvDecodingTables() SharpCompress!SharpCompress.Compressors.BZip2.CBZip2InputStream.GetAndMoveToFrontDecode() SharpCompress!SharpCompress.Compressors.BZip2.CBZip2InputStream.InitBlock() SharpCompress!SharpCompress.Compressors.BZip2.CBZip2InputStream..ctor(class System.IO.Stream,bool) SharpCompress!SharpCompress.Compressors.BZip2.BZip2Stream..ctor(class System.IO.Stream,value class SharpCompress.Compressors.CompressionMode,bool) SharpCompress!SharpCompress.Factories.TarFactory.TryOpenReader(class SharpCompress.IO.RewindableStream,class SharpCompress.Readers.ReaderOptions,class SharpCompress.Readers.IReader&) SharpCompress!SharpCompress.Readers.ReaderFactory.Open(class System.IO.Stream,class SharpCompress.Readers.ReaderOptions) app!Program.<Main>$(class System.String[]) ``` This byte sequence written to a file gets detected as "bzip2 compressed data" by the `file` tool, but `bzip2` fails to read it with the error message "bzip2: Compressed file ends unexpectedly". _Found by Linux Verification Center (linuxtesting.org) with AFL++ and SharpFuzz. Reporter: Valery Korolyov ([v.korolyov@gardatech.ru](mailto:v.korolyov@gardatech.ru)) Organization: Garda Technologies ([info@gardatech.ru](mailto:info@gardatech.ru))_
claunia added the bugup for grabs labels 2026-01-29 22:15:07 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/sharpcompress#638