fix(backend): single error body on pages paths, reject newline entry names, empty-index cache skip
This commit is contained in:
@@ -15,7 +15,7 @@ var ErrNotZip = errors.New("not a readable zip")
|
||||
var ErrUnsafeZip = errors.New("unsafe zip entry")
|
||||
|
||||
func unsafeEntry(n string) bool {
|
||||
return strings.HasPrefix(n, "/") || strings.Contains(n, "..") || strings.ContainsRune(n, '\\')
|
||||
return strings.HasPrefix(n, "/") || strings.Contains(n, "..") || strings.ContainsRune(n, '\\') || strings.ContainsAny(n, "\n\r")
|
||||
}
|
||||
|
||||
func isImage(name string) bool {
|
||||
|
||||
@@ -39,7 +39,7 @@ func TestPageIndexSortAndFilter(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestPageIndexRejectsSlip(t *testing.T) {
|
||||
for _, bad := range []string{"../evil.jpg", "/etc/passwd.jpg", "a\\..\\b.jpg"} {
|
||||
for _, bad := range []string{"../evil.jpg", "/etc/passwd.jpg", "a\\..\\b.jpg", "pag\ne.jpg", "pag\re.jpg"} {
|
||||
r := zipOf(t, bad)
|
||||
if _, err := PageIndex(r, int64(r.Len())); err == nil {
|
||||
t.Fatalf("entry %q must be rejected", bad)
|
||||
|
||||
Reference in New Issue
Block a user