From 4508ae812268a80915086b0d1de6c84064d5376a Mon Sep 17 00:00:00 2001 From: Jason Del Ponte <961963+jasdel@users.noreply.github.com> Date: Wed, 17 Aug 2022 13:33:19 -0700 Subject: [PATCH] private/protocol/query: Fix deserialize error code with spaces Fixes the ec2query and query protocol error deserializers to trim leading and trailing spaces from error code and message parameters. JSON based protocol's don't need this change, because the values are quoted. --- private/protocol/ec2query/unmarshal.go | 3 ++- .../protocol/ec2query/unmarshal_error_test.go | 24 +++++++++++++++++++ private/protocol/query/unmarshal_error.go | 3 ++- .../protocol/query/unmarshal_error_test.go | 21 ++++++++++++++++ 4 files changed, 49 insertions(+), 2 deletions(-) diff --git a/private/protocol/ec2query/unmarshal.go b/private/protocol/ec2query/unmarshal.go index c42b04a8d5..0be67be590 100644 --- a/private/protocol/ec2query/unmarshal.go +++ b/private/protocol/ec2query/unmarshal.go @@ -4,6 +4,7 @@ package ec2query import ( "encoding/xml" + "strings" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/request" @@ -70,7 +71,7 @@ func UnmarshalError(r *request.Request) { } r.Error = awserr.NewRequestFailure( - awserr.New(respErr.Code, respErr.Message, nil), + awserr.New(strings.TrimSpace(respErr.Code), strings.TrimSpace(respErr.Message), nil), r.HTTPResponse.StatusCode, respErr.RequestID, ) diff --git a/private/protocol/ec2query/unmarshal_error_test.go b/private/protocol/ec2query/unmarshal_error_test.go index ad83dc4a35..80734be5e6 100644 --- a/private/protocol/ec2query/unmarshal_error_test.go +++ b/private/protocol/ec2query/unmarshal_error_test.go @@ -40,6 +40,30 @@ func TestUnmarshalError(t *testing.T) { Code: "codeAbc", Msg: "msg123", Status: 400, ReqID: "reqID123", }, + "ErrorResponse with spaces": { + Request: &request.Request{ + HTTPResponse: &http.Response{ + StatusCode: 400, + Header: http.Header{}, + Body: ioutil.NopCloser(strings.NewReader( + ` + + + + codeAbc + + + msg123 + + + + reqID123 + `)), + }, + }, + Code: "codeAbc", Msg: "msg123", + Status: 400, ReqID: "reqID123", + }, "unknown tag": { Request: &request.Request{ HTTPResponse: &http.Response{ diff --git a/private/protocol/query/unmarshal_error.go b/private/protocol/query/unmarshal_error.go index 831b0110c5..2c0cbba909 100644 --- a/private/protocol/query/unmarshal_error.go +++ b/private/protocol/query/unmarshal_error.go @@ -3,6 +3,7 @@ package query import ( "encoding/xml" "fmt" + "strings" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/request" @@ -62,7 +63,7 @@ func UnmarshalError(r *request.Request) { } r.Error = awserr.NewRequestFailure( - awserr.New(respErr.Code, respErr.Message, nil), + awserr.New(strings.TrimSpace(respErr.Code), strings.TrimSpace(respErr.Message), nil), r.HTTPResponse.StatusCode, reqID, ) diff --git a/private/protocol/query/unmarshal_error_test.go b/private/protocol/query/unmarshal_error_test.go index 34bf1a5648..7e317004d5 100644 --- a/private/protocol/query/unmarshal_error_test.go +++ b/private/protocol/query/unmarshal_error_test.go @@ -37,6 +37,27 @@ func TestUnmarshalError(t *testing.T) { Code: "codeAbc", Msg: "msg123", Status: 400, ReqID: "reqID123", }, + "ErrorResponse with spaces": { + Request: &request.Request{ + HTTPResponse: &http.Response{ + StatusCode: 400, + Header: http.Header{}, + Body: ioutil.NopCloser(strings.NewReader( + ` + + + codeAbc + + msg123 + + + reqID123 + `)), + }, + }, + Code: "codeAbc", Msg: "msg123", + Status: 400, ReqID: "reqID123", + }, "ServiceUnavailableException": { Request: &request.Request{ HTTPResponse: &http.Response{