48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
package binsnoop
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"runtime"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestReadFileLimitedRejectsOversizedFile(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "firmware.bin")
|
|
if err := os.WriteFile(path, []byte("abcd"), 0600); err != nil {
|
|
t.Fatalf("WriteFile() failed: %v", err)
|
|
}
|
|
_, err := ReadFileLimited(path, 3)
|
|
if err == nil {
|
|
t.Fatal("expected oversized file to be rejected")
|
|
}
|
|
if !strings.Contains(err.Error(), "file is too large") {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestCarveUsesPrivatePermissions(t *testing.T) {
|
|
if runtime.GOOS == "windows" {
|
|
t.Skip("POSIX permission bits are not enforced on Windows")
|
|
}
|
|
path := filepath.Join(t.TempDir(), "private", "carved.bin")
|
|
if err := Carve(path, []byte("secret"), 0, 6); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
info, err := os.Stat(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got := info.Mode().Perm(); got != 0600 {
|
|
t.Fatalf("carved file permissions = %04o, want 0600", got)
|
|
}
|
|
dirInfo, err := os.Stat(filepath.Dir(path))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got := dirInfo.Mode().Perm(); got != 0700 {
|
|
t.Fatalf("carve directory permissions = %04o, want 0700", got)
|
|
}
|
|
}
|