From a366b00e3e251fb5b2dd786391cfd81642df5261 Mon Sep 17 00:00:00 2001 From: Adam Jensen Date: Sun, 3 Jun 2018 12:24:51 -0400 Subject: [PATCH] Return appropriate errors if upload-length is misused in PATCH requests --- unrouted_handler.go | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/unrouted_handler.go b/unrouted_handler.go index 2b9411a..dd5acab 100644 --- a/unrouted_handler.go +++ b/unrouted_handler.go @@ -459,18 +459,26 @@ func (handler *UnroutedHandler) PatchFile(w http.ResponseWriter, r *http.Request return } - if handler.composer.UsesLengthDeferrer && info.SizeIsDeferred && r.Header.Get("Upload-Length") != "" { - uploadLength, err := strconv.ParseInt(r.Header.Get("Upload-Length"), 10, 64) - if err != nil || uploadLength < 0 || uploadLength < info.Offset || uploadLength > handler.config.MaxSize { - handler.sendError(w, r, ErrInvalidUploadLength) - return - } + if r.Header.Get("Upload-Length") != "" { + if handler.composer.UsesLengthDeferrer { + if info.SizeIsDeferred { + uploadLength, err := strconv.ParseInt(r.Header.Get("Upload-Length"), 10, 64) + if err != nil || uploadLength < 0 || uploadLength < info.Offset || uploadLength > handler.config.MaxSize { + handler.sendError(w, r, ErrInvalidUploadLength) + return + } - info.Size = uploadLength - info.SizeIsDeferred = false - if err := handler.composer.LengthDeferrer.DeclareLength(id, info.Size); err != nil { - handler.sendError(w, r, err) - return + info.Size = uploadLength + info.SizeIsDeferred = false + if err := handler.composer.LengthDeferrer.DeclareLength(id, info.Size); err != nil { + handler.sendError(w, r, err) + return + } + } else { + handler.sendError(w, r, ErrInvalidUploadLength) + } + } else { + handler.sendError(w, r, ErrNotImplemented) } }