Skip to content

Commit

Permalink
check name for illegal values during tus uploads
Browse files Browse the repository at this point in the history
  • Loading branch information
David Christofas committed Jul 19, 2021
1 parent 7df477f commit 90e8c08
Showing 1 changed file with 30 additions and 3 deletions.
33 changes: 30 additions & 3 deletions internal/http/services/owncloud/ocdav/tus.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,16 +37,43 @@ import (
"go.opencensus.io/trace"
)

type nameRule interface {
Test(name string) bool
}

type nameNotEmpty struct{}

func (r nameNotEmpty) Test(name string) bool {
return len(strings.TrimSpace(name)) > 0
}

type nameDoesNotContain struct {
chars string
}

func (r nameDoesNotContain) Test(name string) bool {
return !strings.ContainsAny(name, r.chars)
}

var (
nameRules = [...]nameRule{
nameNotEmpty{},
nameDoesNotContain{chars: "\f\r\n\\"},
}
)

func (s *svc) handlePathTusPost(w http.ResponseWriter, r *http.Request, ns string) {
ctx := r.Context()
ctx, span := trace.StartSpan(ctx, "tus-post")
defer span.End()

// read filename from metadata
meta := tusd.ParseMetadataHeader(r.Header.Get(HeaderUploadMetadata))
if meta["filename"] == "" {
w.WriteHeader(http.StatusPreconditionFailed)
return
for _, r := range nameRules {
if !r.Test(meta["filename"]) {
w.WriteHeader(http.StatusPreconditionFailed)
return
}
}

// append filename to current dir
Expand Down

0 comments on commit 90e8c08

Please sign in to comment.