Better disabling of compression types
This commit is contained in:
@@ -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")
|
||||
}
|
||||
}
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user