@@ -1014,7 +1014,12 @@ func (r *Request) fmtBodyString(sl int64) (body string) {
1014
1014
contentType := r .Header .Get (hdrContentTypeKey )
1015
1015
kind := kindOf (r .Body )
1016
1016
if canJSONMarshal (contentType , kind ) {
1017
- prtBodyBytes , err = noescapeJSONMarshalIndent (& r .Body )
1017
+ var bodyBuf * bytes.Buffer
1018
+ bodyBuf , err = noescapeJSONMarshalIndent (& r .Body )
1019
+ if err == nil {
1020
+ prtBodyBytes = bodyBuf .Bytes ()
1021
+ defer releaseBuffer (bodyBuf )
1022
+ }
1018
1023
} else if IsXMLType (contentType ) && (kind == reflect .Struct ) {
1019
1024
prtBodyBytes , err = xml .MarshalIndent (& r .Body , "" , " " )
1020
1025
} else if b , ok := r .Body .(string ); ok {
@@ -1077,17 +1082,16 @@ var noescapeJSONMarshal = func(v interface{}) (*bytes.Buffer, error) {
1077
1082
return buf , nil
1078
1083
}
1079
1084
1080
- var noescapeJSONMarshalIndent = func (v interface {}) ([] byte , error ) {
1085
+ var noescapeJSONMarshalIndent = func (v interface {}) (* bytes. Buffer , error ) {
1081
1086
buf := acquireBuffer ()
1082
- defer releaseBuffer (buf )
1083
-
1084
1087
encoder := json .NewEncoder (buf )
1085
1088
encoder .SetEscapeHTML (false )
1086
1089
encoder .SetIndent ("" , " " )
1087
1090
1088
1091
if err := encoder .Encode (v ); err != nil {
1092
+ releaseBuffer (buf )
1089
1093
return nil , err
1090
1094
}
1091
1095
1092
- return buf . Bytes () , nil
1096
+ return buf , nil
1093
1097
}
0 commit comments