Skip to content

Commit

Permalink
api/server: allow empty body for POST /commit again
Browse files Browse the repository at this point in the history
The error returned by DecodeConfig was changed in
b6d58d7 and caused this to regress.
Allow empty request bodies for this endpoint once again.

Signed-off-by: Cory Snider <csnider@mirantis.com>
  • Loading branch information
corhere committed May 17, 2023
1 parent 3ceb381 commit 967c7bc
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 5 deletions.
5 changes: 4 additions & 1 deletion api/server/router/container/container_routes.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func (s *containerRouter) postCommit(ctx context.Context, w http.ResponseWriter,
}

config, _, _, err := s.decoder.DecodeConfig(r.Body)
if err != nil && err != io.EOF { // Do not fail if body is empty.
if err != nil && !errors.Is(err, io.EOF) { // Do not fail if body is empty.
return err
}

Expand Down Expand Up @@ -486,6 +486,9 @@ func (s *containerRouter) postContainersCreate(ctx context.Context, w http.Respo

config, hostConfig, networkingConfig, err := s.decoder.DecodeConfig(r.Body)
if err != nil {
if errors.Is(err, io.EOF) {
return errdefs.InvalidParameter(errors.New("invalid JSON: got EOF while reading request body"))
}
return err
}
version := httputils.VersionFromContext(ctx)
Expand Down
5 changes: 1 addition & 4 deletions runconfig/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,7 @@ func decodeContainerConfig(src io.Reader, si *sysinfo.SysInfo) (*container.Confi
func loadJSON(src io.Reader, out interface{}) error {
dec := json.NewDecoder(src)
if err := dec.Decode(&out); err != nil {
if err == io.EOF {
return validationError("invalid JSON: got EOF while reading request body")
}
return validationError("invalid JSON: " + err.Error())
return invalidJSONError{Err: err}
}
if dec.More() {
return validationError("unexpected content after JSON")
Expand Down
14 changes: 14 additions & 0 deletions runconfig/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,17 @@ func (e validationError) Error() string {
}

func (e validationError) InvalidParameter() {}

type invalidJSONError struct {
Err error
}

func (e invalidJSONError) Error() string {
return "invalid JSON: " + e.Err.Error()
}

func (e invalidJSONError) Unwrap() error {
return e.Err
}

func (e invalidJSONError) InvalidParameter() {}

0 comments on commit 967c7bc

Please sign in to comment.