PHP Classes

File: extension/exio/paths_test.go

Recommend this page to a friend!
  Packages of Roni   Easy-Excel   extension/exio/paths_test.go   Download  
File: extension/exio/paths_test.go
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: Easy-Excel
Export and read XLSX files with a PHP Go extension
Author: By
Last change:
Date: 7 days ago
Size: 1,439 bytes
 

Contents

Class file image Download
package exio import ( "errors" "path/filepath" "testing" ) func TestUnrestrictedPolicy(t *testing.T) { p, _ := NewPolicy(nil) got, err := p.Resolve("/tmp/foo.xlsx") if err != nil || got != filepath.Clean("/tmp/foo.xlsx") { t.Fatalf("got %q, %v", got, err) } } func TestSchemeRejected(t *testing.T) { p, _ := NewPolicy(nil) for _, bad := range []string{"http://x/a.xlsx", "phar://evil", "s3://bucket/k"} { if _, err := p.Resolve(bad); !errors.Is(err, ErrDenied) { t.Fatalf("%q should be denied, got %v", bad, err) } } } func TestAllowlistAndTraversal(t *testing.T) { p, err := NewPolicy([]string{"/var/exports"}) if err != nil { t.Fatal(err) } if _, err := p.Resolve("/var/exports/a/b.xlsx"); err != nil { t.Fatalf("inside allowlist should pass: %v", err) } for _, bad := range []string{ "/var/exports/../secrets/x.xlsx", // traversal escapes base "/etc/passwd", "/var/exportsevil/x.xlsx", // prefix trick must not match } { if _, err := p.Resolve(bad); !errors.Is(err, ErrDenied) { t.Fatalf("%q should be denied, got %v", bad, err) } } // traversal that stays inside the base is fine after cleaning if _, err := p.Resolve("/var/exports/a/../b.xlsx"); err != nil { t.Fatalf("clean path inside base should pass: %v", err) } } func TestEmptyPath(t *testing.T) { p, _ := NewPolicy(nil) if _, err := p.Resolve(""); !errors.Is(err, ErrDenied) { t.Fatal("empty path must be denied") } }