(f io.Reader, compressed bool, fileEncoding string)
| 1938 | } |
| 1939 | |
| 1940 | func readFileHeader(f io.Reader, compressed bool, fileEncoding string) ([]byte, error) { |
| 1941 | r := f |
| 1942 | var ( |
| 1943 | br *brotli.Reader |
| 1944 | zr *gzip.Reader |
| 1945 | zsr *zstd.Decoder |
| 1946 | ) |
| 1947 | if compressed { |
| 1948 | var err error |
| 1949 | switch fileEncoding { |
| 1950 | case "br": |
| 1951 | if br, err = acquireBrotliReader(f); err != nil { |
| 1952 | return nil, err |
| 1953 | } |
| 1954 | r = br |
| 1955 | case "gzip": |
| 1956 | if zr, err = acquireGzipReader(f); err != nil { |
| 1957 | return nil, err |
| 1958 | } |
| 1959 | r = zr |
| 1960 | case "zstd": |
| 1961 | if zsr, err = acquireZstdReader(f); err != nil { |
| 1962 | return nil, err |
| 1963 | } |
| 1964 | r = zsr |
| 1965 | } |
| 1966 | } |
| 1967 | |
| 1968 | lr := &io.LimitedReader{ |
| 1969 | R: r, |
| 1970 | N: 512, |
| 1971 | } |
| 1972 | data, err := io.ReadAll(lr) |
| 1973 | seeker, ok := f.(io.Seeker) |
| 1974 | if !ok { |
| 1975 | return nil, errors.New("must implement io.Seeker") |
| 1976 | } |
| 1977 | if _, err := seeker.Seek(0, io.SeekStart); err != nil { |
| 1978 | return nil, err |
| 1979 | } |
| 1980 | |
| 1981 | if br != nil { |
| 1982 | releaseBrotliReader(br) |
| 1983 | } |
| 1984 | |
| 1985 | if zr != nil { |
| 1986 | releaseGzipReader(zr) |
| 1987 | } |
| 1988 | |
| 1989 | if zsr != nil { |
| 1990 | releaseZstdReader(zsr) |
| 1991 | } |
| 1992 | |
| 1993 | return data, err |
| 1994 | } |
| 1995 | |
| 1996 | func stripLeadingSlashes(path []byte, stripSlashes int) []byte { |
| 1997 | for stripSlashes > 0 && len(path) > 0 { |
no test coverage detected
searching dependent graphs…