From b07e51cf739fad7a58a59223eb31cd1a50043c56 Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Thu, 10 May 2018 15:02:41 +0100 Subject: [PATCH] webdav: read the body of messages into the error if XML parse fails --- backend/webdav/webdav.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/backend/webdav/webdav.go b/backend/webdav/webdav.go index 86ec2e0a8..cc81fd329 100644 --- a/backend/webdav/webdav.go +++ b/backend/webdav/webdav.go @@ -19,6 +19,7 @@ package webdav // For example the ownCloud WebDAV server does it that way. import ( + "encoding/xml" "fmt" "io" "net/http" @@ -209,11 +210,16 @@ func (f *Fs) readMetaDataForPath(path string) (info *api.Prop, err error) { // errorHandler parses a non 2xx error response into an error func errorHandler(resp *http.Response) error { + body, err := rest.ReadBody(resp) + if err != nil { + return errors.Wrap(err, "error when trying to read error from body") + } // Decode error response errResponse := new(api.Error) - err := rest.DecodeXML(resp, &errResponse) + err = xml.Unmarshal(body, &errResponse) if err != nil { - fs.Debugf(nil, "Couldn't decode error response: %v", err) + // set the Message to be the body if can't parse the XML + errResponse.Message = strings.TrimSpace(string(body)) } errResponse.Status = resp.Status errResponse.StatusCode = resp.StatusCode