Better disabling of compression types

This commit is contained in:
Caleb Gardner
2025-03-17 06:53:29 -05:00
parent 88315ee384
commit f242de2710
9 changed files with 61 additions and 139 deletions
-34
View File
@@ -1,34 +0,0 @@
//go:build !no_gpl && !no_obsolete
package decompress
import "errors"
// The types of compression supported by squashfs
const (
ZlibCompression = uint16(iota + 1)
LZMACompression
LZOCompression
XZCompression
LZ4Compression
ZSTDCompression
)
func GetDecompressor(compType uint16) (Decompressor, error) {
switch compType {
case ZlibCompression:
return Zlib{}, nil
case LZMACompression:
return Lzma{}, nil
case LZOCompression:
return Lzo{}, nil
case XZCompression:
return Xz{}, nil
case LZ4Compression:
return Lz4{}, nil
case ZSTDCompression:
return &Zstd{}, nil
default:
return nil, errors.New("invalid compression type. possible corrupted archive")
}
}
-34
View File
@@ -1,34 +0,0 @@
//go:build no_gpl && !no_obsolete
package decompress
import "errors"
// The types of compression supported by squashfs
const (
ZlibCompression = uint16(iota + 1)
LZMACompression
LZOCompression
XZCompression
LZ4Compression
ZSTDCompression
)
func GetDecompressor(compType uint16) (Decompressor, error) {
switch compType {
case ZlibCompression:
return Zlib{}, nil
case LZMACompression:
return Lzma{}, nil
case LZOCompression:
return nil, errors.New("lzo compression is disable in this build with no_gpl")
case XZCompression:
return Xz{}, nil
case LZ4Compression:
return Lz4{}, nil
case ZSTDCompression:
return &Zstd{}, nil
default:
return nil, errors.New("invalid compression type. possible corrupted archive")
}
}
@@ -1,34 +0,0 @@
//go:build no_obsolete && !no_gpl
package decompress
import "errors"
// The types of compression supported by squashfs
const (
ZlibCompression = uint16(iota + 1)
LZMACompression
LZOCompression
XZCompression
LZ4Compression
ZSTDCompression
)
func GetDecompressor(compType uint16) (Decompressor, error) {
switch compType {
case ZlibCompression:
return Zlib{}, nil
case LZMACompression:
return nil, errors.New("lzma compression is disable in this build with no_obsolete")
case LZOCompression:
return Lzo{}, nil
case XZCompression:
return Xz{}, nil
case LZ4Compression:
return Lz4{}, nil
case ZSTDCompression:
return &Zstd{}, nil
default:
return nil, errors.New("invalid compression type. possible corrupted archive")
}
}
@@ -1,34 +0,0 @@
//go:build no_gpl && no_obsolete
package decompress
import "errors"
// The types of compression supported by squashfs
const (
ZlibCompression = uint16(iota + 1)
LZMACompression
LZOCompression
XZCompression
LZ4Compression
ZSTDCompression
)
func GetDecompressor(compType uint16) (Decompressor, error) {
switch compType {
case ZlibCompression:
return Zlib{}, nil
case LZMACompression:
return nil, errors.New("lzma compression is disable in this build with no_obsolete")
case LZOCompression:
return nil, errors.New("lzo compression is disable in this build with no_gpl")
case XZCompression:
return Xz{}, nil
case LZ4Compression:
return Lz4{}, nil
case ZSTDCompression:
return &Zstd{}, nil
default:
return nil, errors.New("invalid compression type. possible corrupted archive")
}
}
+4
View File
@@ -11,6 +11,10 @@ import (
type Lzma struct{} type Lzma struct{}
func NewLzma() (Lzma, error) {
return Lzma{}, nil
}
func (l Lzma) Decompress(data []byte) ([]byte, error) { func (l Lzma) Decompress(data []byte) ([]byte, error) {
rdr, err := lzma.NewReader(bytes.NewReader(data)) rdr, err := lzma.NewReader(bytes.NewReader(data))
if err != nil { if err != nil {
+17
View File
@@ -0,0 +1,17 @@
//go:build no_obsolete
package decompress
import (
"errors"
)
type Lzma struct{}
func NewLzma() (Lzma, error) {
return Lzma{}, errors.New("lzma compression is disable in this build with no_obsolete")
}
func (l Lzma) Decompress(data []byte) ([]byte, error) {
return nil, errors.New("lzma compression is disable in this build with no_obsolete")
}
+4
View File
@@ -10,6 +10,10 @@ import (
type Lzo struct{} type Lzo struct{}
func NewLzo() (Lzo, error) {
return Lzo{}, nil
}
func (l Lzo) Decompress(data []byte) ([]byte, error) { func (l Lzo) Decompress(data []byte) ([]byte, error) {
return lzo.Decompress1X(bytes.NewReader(data), len(data), 0) return lzo.Decompress1X(bytes.NewReader(data), len(data), 0)
} }
+15
View File
@@ -0,0 +1,15 @@
//go:build no_gpl
package decompress
import "errors"
type Lzo struct{}
func NewLzo() (Lzo, error) {
return Lzo{}, errors.New("lzo compression is disable in this build with no_gpl")
}
func (l Lzo) Decompress(data []byte) ([]byte, error) {
return nil, errors.New("lzo compression is disable in this build with no_gpl")
}
+21 -3
View File
@@ -55,9 +55,27 @@ func NewReader(r io.ReaderAt) (rdr *Reader, err error) {
if !rdr.Superblock.ValidVersion() { if !rdr.Superblock.ValidVersion() {
return nil, ErrorVersion return nil, ErrorVersion
} }
rdr.d, err = decompress.GetDecompressor(rdr.Superblock.CompType) switch rdr.Superblock.CompType {
if err != nil { case ZlibCompression:
return nil, err rdr.d = decompress.Zlib{}
case LZMACompression:
rdr.d, err = decompress.NewLzma()
if err != nil {
return nil, err
}
case LZOCompression:
rdr.d, err = decompress.NewLzo()
if err != nil {
return nil, err
}
case XZCompression:
rdr.d = decompress.Xz{}
case LZ4Compression:
rdr.d = decompress.Lz4{}
case ZSTDCompression:
rdr.d = decompress.Zstd{}
default:
return nil, errors.New("invalid compression type. possible corrupted archive")
} }
rdr.Root, err = rdr.directoryFromRef(rdr.Superblock.RootInodeRef, "") rdr.Root, err = rdr.directoryFromRef(rdr.Superblock.RootInodeRef, "")
if err != nil { if err != nil {