Skip to content

Commit 3d81ca2

Browse files
committed
GOSDK-29: SDK leaks memory from unclosed HTTP response bodies. Updating Go SDK to close file handles always within response handlers instead of in the response parsing to handle error scenarios and no response payload scenarios.
1 parent 0a53ef7 commit 3d81ca2

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

ds3-autogen-go/src/main/java/com/spectralogic/ds3autogen/go/GoCodeGenerator.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,9 @@ static ResponseModelGenerator<?> getResponseGenerator(final Ds3Request ds3Reques
251251
* Retrieves the appropriate template that will generate the Go response handler
252252
*/
253253
private Template getResponseTemplate(final Ds3Request ds3Request) throws IOException {
254-
//TODO special case if necessary
254+
if (isGetObjectAmazonS3Request(ds3Request)) {
255+
return config.getTemplate("response/response_get_object_template.ftl");
256+
}
255257
return config.getTemplate("response/response_template.ftl");
256258
}
257259

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
type ${name} struct {
2+
${payloadStruct}
3+
Headers *http.Header
4+
}
5+
6+
${parseResponseMethod}
7+
8+
func New${name}(webResponse WebResponse) (*${name}, error) {
9+
expectedStatusCodes := []int { ${expectedCodes} }
10+
11+
switch code := webResponse.StatusCode(); code {
12+
<#list responseCodes as code>
13+
case ${code.code}:
14+
${code.parseResponse}
15+
</#list>
16+
default:
17+
defer webResponse.Body().Close()
18+
return nil, buildBadStatusCodeError(webResponse, expectedStatusCodes)
19+
}
20+
}
21+

ds3-autogen-go/src/main/resources/tmpls/go/response/response_template.ftl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ type ${name} struct {
66
${parseResponseMethod}
77

88
func New${name}(webResponse WebResponse) (*${name}, error) {
9+
defer webResponse.Body().Close()
910
expectedStatusCodes := []int { ${expectedCodes} }
1011

1112
switch code := webResponse.StatusCode(); code {

0 commit comments

Comments
 (0)