44 "context"
55 "encoding/json"
66 "fmt"
7+ "io"
78 "net/http"
89 "strconv"
910
@@ -21,7 +22,10 @@ import (
2122func (sr * swarmRouter ) initCluster (ctx context.Context , w http.ResponseWriter , r * http.Request , vars map [string ]string ) error {
2223 var req types.InitRequest
2324 if err := json .NewDecoder (r .Body ).Decode (& req ); err != nil {
24- return err
25+ if err == io .EOF {
26+ return errdefs .InvalidParameter (errors .New ("got EOF while reading request body" ))
27+ }
28+ return errdefs .InvalidParameter (err )
2529 }
2630 nodeID , err := sr .backend .Init (req )
2731 if err != nil {
@@ -34,7 +38,10 @@ func (sr *swarmRouter) initCluster(ctx context.Context, w http.ResponseWriter, r
3438func (sr * swarmRouter ) joinCluster (ctx context.Context , w http.ResponseWriter , r * http.Request , vars map [string ]string ) error {
3539 var req types.JoinRequest
3640 if err := json .NewDecoder (r .Body ).Decode (& req ); err != nil {
37- return err
41+ if err == io .EOF {
42+ return errdefs .InvalidParameter (errors .New ("got EOF while reading request body" ))
43+ }
44+ return errdefs .InvalidParameter (err )
3845 }
3946 return sr .backend .Join (req )
4047}
@@ -61,7 +68,10 @@ func (sr *swarmRouter) inspectCluster(ctx context.Context, w http.ResponseWriter
6168func (sr * swarmRouter ) updateCluster (ctx context.Context , w http.ResponseWriter , r * http.Request , vars map [string ]string ) error {
6269 var swarm types.Spec
6370 if err := json .NewDecoder (r .Body ).Decode (& swarm ); err != nil {
64- return err
71+ if err == io .EOF {
72+ return errdefs .InvalidParameter (errors .New ("got EOF while reading request body" ))
73+ }
74+ return errdefs .InvalidParameter (err )
6575 }
6676
6777 rawVersion := r .URL .Query ().Get ("version" )
@@ -112,7 +122,10 @@ func (sr *swarmRouter) updateCluster(ctx context.Context, w http.ResponseWriter,
112122func (sr * swarmRouter ) unlockCluster (ctx context.Context , w http.ResponseWriter , r * http.Request , vars map [string ]string ) error {
113123 var req types.UnlockRequest
114124 if err := json .NewDecoder (r .Body ).Decode (& req ); err != nil {
115- return err
125+ if err == io .EOF {
126+ return errdefs .InvalidParameter (errors .New ("got EOF while reading request body" ))
127+ }
128+ return errdefs .InvalidParameter (err )
116129 }
117130
118131 if err := sr .backend .UnlockSwarm (req ); err != nil {
@@ -175,7 +188,10 @@ func (sr *swarmRouter) getService(ctx context.Context, w http.ResponseWriter, r
175188func (sr * swarmRouter ) createService (ctx context.Context , w http.ResponseWriter , r * http.Request , vars map [string ]string ) error {
176189 var service types.ServiceSpec
177190 if err := json .NewDecoder (r .Body ).Decode (& service ); err != nil {
178- return err
191+ if err == io .EOF {
192+ return errdefs .InvalidParameter (errors .New ("got EOF while reading request body" ))
193+ }
194+ return errdefs .InvalidParameter (err )
179195 }
180196
181197 // Get returns "" if the header does not exist
@@ -207,7 +223,10 @@ func (sr *swarmRouter) createService(ctx context.Context, w http.ResponseWriter,
207223func (sr * swarmRouter ) updateService (ctx context.Context , w http.ResponseWriter , r * http.Request , vars map [string ]string ) error {
208224 var service types.ServiceSpec
209225 if err := json .NewDecoder (r .Body ).Decode (& service ); err != nil {
210- return err
226+ if err == io .EOF {
227+ return errdefs .InvalidParameter (errors .New ("got EOF while reading request body" ))
228+ }
229+ return errdefs .InvalidParameter (err )
211230 }
212231
213232 rawVersion := r .URL .Query ().Get ("version" )
@@ -309,7 +328,10 @@ func (sr *swarmRouter) getNode(ctx context.Context, w http.ResponseWriter, r *ht
309328func (sr * swarmRouter ) updateNode (ctx context.Context , w http.ResponseWriter , r * http.Request , vars map [string ]string ) error {
310329 var node types.NodeSpec
311330 if err := json .NewDecoder (r .Body ).Decode (& node ); err != nil {
312- return err
331+ if err == io .EOF {
332+ return errdefs .InvalidParameter (errors .New ("got EOF while reading request body" ))
333+ }
334+ return errdefs .InvalidParameter (err )
313335 }
314336
315337 rawVersion := r .URL .Query ().Get ("version" )
@@ -388,7 +410,10 @@ func (sr *swarmRouter) getSecrets(ctx context.Context, w http.ResponseWriter, r
388410func (sr * swarmRouter ) createSecret (ctx context.Context , w http.ResponseWriter , r * http.Request , vars map [string ]string ) error {
389411 var secret types.SecretSpec
390412 if err := json .NewDecoder (r .Body ).Decode (& secret ); err != nil {
391- return err
413+ if err == io .EOF {
414+ return errdefs .InvalidParameter (errors .New ("got EOF while reading request body" ))
415+ }
416+ return errdefs .InvalidParameter (err )
392417 }
393418 version := httputils .VersionFromContext (ctx )
394419 if secret .Templating != nil && versions .LessThan (version , "1.37" ) {
@@ -426,6 +451,9 @@ func (sr *swarmRouter) getSecret(ctx context.Context, w http.ResponseWriter, r *
426451func (sr * swarmRouter ) updateSecret (ctx context.Context , w http.ResponseWriter , r * http.Request , vars map [string ]string ) error {
427452 var secret types.SecretSpec
428453 if err := json .NewDecoder (r .Body ).Decode (& secret ); err != nil {
454+ if err == io .EOF {
455+ return errdefs .InvalidParameter (errors .New ("got EOF while reading request body" ))
456+ }
429457 return errdefs .InvalidParameter (err )
430458 }
431459
@@ -459,7 +487,10 @@ func (sr *swarmRouter) getConfigs(ctx context.Context, w http.ResponseWriter, r
459487func (sr * swarmRouter ) createConfig (ctx context.Context , w http.ResponseWriter , r * http.Request , vars map [string ]string ) error {
460488 var config types.ConfigSpec
461489 if err := json .NewDecoder (r .Body ).Decode (& config ); err != nil {
462- return err
490+ if err == io .EOF {
491+ return errdefs .InvalidParameter (errors .New ("got EOF while reading request body" ))
492+ }
493+ return errdefs .InvalidParameter (err )
463494 }
464495
465496 version := httputils .VersionFromContext (ctx )
@@ -498,6 +529,9 @@ func (sr *swarmRouter) getConfig(ctx context.Context, w http.ResponseWriter, r *
498529func (sr * swarmRouter ) updateConfig (ctx context.Context , w http.ResponseWriter , r * http.Request , vars map [string ]string ) error {
499530 var config types.ConfigSpec
500531 if err := json .NewDecoder (r .Body ).Decode (& config ); err != nil {
532+ if err == io .EOF {
533+ return errdefs .InvalidParameter (errors .New ("got EOF while reading request body" ))
534+ }
501535 return errdefs .InvalidParameter (err )
502536 }
503537
0 commit comments