webdav: read the body of messages into the error if XML parse fails

This commit is contained in:
Nick Craig-Wood 2018-05-10 15:02:41 +01:00
parent f073db81b1
commit b07e51cf73

View File

@ -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