ci / check (push) Successful in 1m12s
Lista conteudo de .zip, .tar, .tar.gz e .gz sem extrair, com limite anti-bomba.
86 lines
2.1 KiB
Go
86 lines
2.1 KiB
Go
package store
|
|
|
|
import (
|
|
"archive/tar"
|
|
"archive/zip"
|
|
"bytes"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func makeZip(t *testing.T) []byte {
|
|
t.Helper()
|
|
var buf bytes.Buffer
|
|
w := zip.NewWriter(&buf)
|
|
fw, err := w.Create("docs/nota.txt")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
fw.Write([]byte("ola"))
|
|
w.Create("vazia/")
|
|
if err := w.Close(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return buf.Bytes()
|
|
}
|
|
|
|
func makeTar(t *testing.T) []byte {
|
|
t.Helper()
|
|
var buf bytes.Buffer
|
|
w := tar.NewWriter(&buf)
|
|
body := []byte("abc")
|
|
w.WriteHeader(&tar.Header{Name: "a.txt", Mode: 0o600, Size: int64(len(body))})
|
|
w.Write(body)
|
|
w.WriteHeader(&tar.Header{Name: "dir", Typeflag: tar.TypeDir, Mode: 0o755})
|
|
if err := w.Close(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return buf.Bytes()
|
|
}
|
|
|
|
func TestListArchiveZip(t *testing.T) {
|
|
s := newTestStore(t)
|
|
m, err := s.AddFile("backup.zip", "", "", bytes.NewReader(makeZip(t)))
|
|
if err != nil {
|
|
t.Fatalf("AddFile: %v", err)
|
|
}
|
|
entries, total, trunc, err := s.ListArchive(m.ID)
|
|
if err != nil {
|
|
t.Fatalf("ListArchive: %v", err)
|
|
}
|
|
if total != 2 || trunc || len(entries) != 2 {
|
|
t.Fatalf("inesperado: total=%d trunc=%v entries=%v", total, trunc, entries)
|
|
}
|
|
if entries[0].Name != "docs/nota.txt" || entries[0].Dir || entries[0].Size != 3 {
|
|
t.Errorf("entry0: %+v", entries[0])
|
|
}
|
|
if entries[1].Name != "vazia/" || !entries[1].Dir {
|
|
t.Errorf("entry1: %+v", entries[1])
|
|
}
|
|
}
|
|
|
|
func TestListArchiveTarAndRejectsOthers(t *testing.T) {
|
|
s := newTestStore(t)
|
|
m, err := s.AddFile("dados.tar", "", "", bytes.NewReader(makeTar(t)))
|
|
if err != nil {
|
|
t.Fatalf("AddFile: %v", err)
|
|
}
|
|
entries, total, _, err := s.ListArchive(m.ID)
|
|
if err != nil {
|
|
t.Fatalf("ListArchive: %v", err)
|
|
}
|
|
if total != 2 || len(entries) != 2 || entries[0].Name != "a.txt" {
|
|
t.Fatalf("inesperado: total=%d entries=%v", total, entries)
|
|
}
|
|
txt, err := s.AddFile("nota.txt", "", "", strings.NewReader("oi"))
|
|
if err != nil {
|
|
t.Fatalf("AddFile: %v", err)
|
|
}
|
|
if _, _, _, err := s.ListArchive(txt.ID); err == nil {
|
|
t.Fatalf("esperava erro para .txt")
|
|
}
|
|
if _, _, _, err := s.ListArchive("inexistente01"); err == nil {
|
|
t.Fatalf("esperava erro para id inexistente")
|
|
}
|
|
}
|