typelevel / typelevel/fs2

fs2 gunzip doesn't support concatenated gzip files

Open
#3,503 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Scala
Stars
2.5k
Forks
636
Avg merge
2d 4h
Merged PRs (30d)
7

Description

Steps to reproduce:

  • generate a compressed file
echo foo > foo; echo bar > bar; gzip -c foo bar > foobar.gz
  • run the following code
import cats.effect.IO
import cats.effect.unsafe.implicits.global
import fs2.compression.Compression

import java.io.FileInputStream

fs2.io
  .readInputStream(
    IO(new FileInputStream("foobar.gz")),
    1024,
  )
  .through(Compression[IO].gunzip(1024))
  .flatMap(_.content)
  .compile
  .drain
  .unsafeRunSync()

This code snippet throws a java.util.zip.ZipException: Content failed CRC validation.

I expect it to run without error.

Tested on fs2 3.11.0

My gzip version is Apple gzip 430.140.2

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the provided shell command and Scala example through Compression[IO].gunzip(1024), then trace the gzip decompression entry point used by that stream. Done means concatenated gzip members decompress without throwing a CRC validation error.

Written by the indexing model from the issue text.

Assessment

Tech stack
scala
Domain
backend
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.