diff --git a/internal/compressions/writer_zstd.go b/internal/compressions/writer_zstd.go index 942e0b8..d14fdc8 100644 --- a/internal/compressions/writer_zstd.go +++ b/internal/compressions/writer_zstd.go @@ -19,6 +19,10 @@ func NewZSTDWriter(writer io.Writer, level int) (Writer, error) { } func newZSTDWriter(writer io.Writer, level int) (Writer, error) { + if level < 0 { + level = 0 + } + var zstdLevel = zstd.EncoderLevelFromZstd(level) zstdWriter, err := zstd.NewWriter(writer, zstd.WithEncoderLevel(zstdLevel)) diff --git a/internal/compressions/writer_zstd_test.go b/internal/compressions/writer_zstd_test.go index 7f87a95..71af731 100644 --- a/internal/compressions/writer_zstd_test.go +++ b/internal/compressions/writer_zstd_test.go @@ -9,6 +9,24 @@ import ( "testing" ) +func TestNewZSTDWriter_Level0(t *testing.T) { + var buf = &bytes.Buffer{} + writer, err := compressions.NewZSTDWriter(buf, 0) + if err != nil { + t.Fatal(err) + } + var originData = []byte(strings.Repeat("Hello", 1024)) + _, err = writer.Write(originData) + if err != nil { + t.Fatal(err) + } + err = writer.Close() + if err != nil { + t.Fatal(err) + } + t.Log("origin data:", len(originData), "result:", buf.Len()) +} + func TestNewZSTDWriter(t *testing.T) { var buf = &bytes.Buffer{} writer, err := compressions.NewZSTDWriter(buf, 10) diff --git a/internal/nodes/http_writer.go b/internal/nodes/http_writer.go index 30e6023..57dcad4 100644 --- a/internal/nodes/http_writer.go +++ b/internal/nodes/http_writer.go @@ -622,7 +622,7 @@ func (this *HTTPWriter) PrepareCompression(resp *http.Response, size int64) { return } - if this.compressionConfig.Level <= 0 { + if this.compressionConfig.Level < 0 { return }