From f242de2710d0f810a9f0f0d9ab3b7510851003d2 Mon Sep 17 00:00:00 2001 From: Caleb Gardner Date: Mon, 17 Mar 2025 06:53:29 -0500 Subject: [PATCH] Better disabling of compression types --- internal/decompress/get_decomp.go | 34 ------------------- internal/decompress/get_decomp_no_gpl.go | 34 ------------------- .../decompress/get_decomp_no_gpl_obsolete.go | 34 ------------------- internal/decompress/get_decomp_no_obsolete.go | 34 ------------------- internal/decompress/lzma.go | 4 +++ internal/decompress/lzma_disabled.go | 17 ++++++++++ internal/decompress/lzo.go | 4 +++ internal/decompress/lzo_disabled.go | 15 ++++++++ low/reader.go | 24 +++++++++++-- 9 files changed, 61 insertions(+), 139 deletions(-) delete mode 100644 internal/decompress/get_decomp.go delete mode 100644 internal/decompress/get_decomp_no_gpl.go delete mode 100644 internal/decompress/get_decomp_no_gpl_obsolete.go delete mode 100644 internal/decompress/get_decomp_no_obsolete.go create mode 100644 internal/decompress/lzma_disabled.go create mode 100644 internal/decompress/lzo_disabled.go diff --git a/internal/decompress/get_decomp.go b/internal/decompress/get_decomp.go deleted file mode 100644 index ee438e1..0000000 --- a/internal/decompress/get_decomp.go +++ /dev/null @@ -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") - } -} diff --git a/internal/decompress/get_decomp_no_gpl.go b/internal/decompress/get_decomp_no_gpl.go deleted file mode 100644 index 43875c5..0000000 --- a/internal/decompress/get_decomp_no_gpl.go +++ /dev/null @@ -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") - } -} diff --git a/internal/decompress/get_decomp_no_gpl_obsolete.go b/internal/decompress/get_decomp_no_gpl_obsolete.go deleted file mode 100644 index 2c2d3fb..0000000 --- a/internal/decompress/get_decomp_no_gpl_obsolete.go +++ /dev/null @@ -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") - } -} diff --git a/internal/decompress/get_decomp_no_obsolete.go b/internal/decompress/get_decomp_no_obsolete.go deleted file mode 100644 index 0a85d11..0000000 --- a/internal/decompress/get_decomp_no_obsolete.go +++ /dev/null @@ -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") - } -} diff --git a/internal/decompress/lzma.go b/internal/decompress/lzma.go index 8fa1e3c..1403b07 100644 --- a/internal/decompress/lzma.go +++ b/internal/decompress/lzma.go @@ -11,6 +11,10 @@ import ( type Lzma struct{} +func NewLzma() (Lzma, error) { + return Lzma{}, nil +} + func (l Lzma) Decompress(data []byte) ([]byte, error) { rdr, err := lzma.NewReader(bytes.NewReader(data)) if err != nil { diff --git a/internal/decompress/lzma_disabled.go b/internal/decompress/lzma_disabled.go new file mode 100644 index 0000000..d93eb8f --- /dev/null +++ b/internal/decompress/lzma_disabled.go @@ -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") +} diff --git a/internal/decompress/lzo.go b/internal/decompress/lzo.go index b708f50..9f54e9e 100644 --- a/internal/decompress/lzo.go +++ b/internal/decompress/lzo.go @@ -10,6 +10,10 @@ import ( type Lzo struct{} +func NewLzo() (Lzo, error) { + return Lzo{}, nil +} + func (l Lzo) Decompress(data []byte) ([]byte, error) { return lzo.Decompress1X(bytes.NewReader(data), len(data), 0) } diff --git a/internal/decompress/lzo_disabled.go b/internal/decompress/lzo_disabled.go new file mode 100644 index 0000000..181b5cb --- /dev/null +++ b/internal/decompress/lzo_disabled.go @@ -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") +} diff --git a/low/reader.go b/low/reader.go index 85e45d8..1f415ea 100644 --- a/low/reader.go +++ b/low/reader.go @@ -55,9 +55,27 @@ func NewReader(r io.ReaderAt) (rdr *Reader, err error) { if !rdr.Superblock.ValidVersion() { return nil, ErrorVersion } - rdr.d, err = decompress.GetDecompressor(rdr.Superblock.CompType) - if err != nil { - return nil, err + switch rdr.Superblock.CompType { + case ZlibCompression: + 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, "") if err != nil {