From 9a51f5c3506ed644e4e24f879cbb1ae7098f6dbc Mon Sep 17 00:00:00 2001 From: Aron Fischer Date: Thu, 22 Dec 2016 00:35:05 +0100 Subject: [PATCH] swarm/http: check error returned by reader.Size (#3470) --- swarm/api/http/server.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/swarm/api/http/server.go b/swarm/api/http/server.go index 9be60ef94b..f82775f254 100644 --- a/swarm/api/http/server.go +++ b/swarm/api/http/server.go @@ -99,7 +99,7 @@ func handler(w http.ResponseWriter, r *http.Request, a *api.Api) { "[BZZ] Swarm: Protocol error in request `%s`.", uri, ) - http.Error(w, "BZZ protocol error", http.StatusBadRequest) + http.Error(w, "Invalid request URL: need access protocol (bzz:/, bzzr:/, bzzi:/) as first element in path.", http.StatusBadRequest) return } } @@ -187,6 +187,12 @@ func handler(w http.ResponseWriter, r *http.Request, a *api.Api) { reader := a.Retrieve(key) quitC := make(chan bool) size, err := reader.Size(quitC) + if err != nil { + glog.V(logger.Debug).Infof("Could not determine size: %v", err.Error()) + //An error on call to Size means we don't have the root chunk + http.Error(w, err.Error(), http.StatusNotFound) + return + } glog.V(logger.Debug).Infof("Reading %d bytes.", size) // setting mime type @@ -229,6 +235,12 @@ func handler(w http.ResponseWriter, r *http.Request, a *api.Api) { } quitC := make(chan bool) size, err := reader.Size(quitC) + if err != nil { + glog.V(logger.Debug).Infof("Could not determine size: %v", err.Error()) + //An error on call to Size means we don't have the root chunk + http.Error(w, err.Error(), http.StatusNotFound) + return + } glog.V(logger.Debug).Infof("Served '%s' (%d bytes) as '%s' (status code: %v)", uri, size, mimeType, status) http.ServeContent(w, r, path, forever(), reader)