Skip to content

Commit ac135ab

Browse files
[management/client/rest] fix panic when body is nil (#3714)
Fixes panic occurring when body is nil (this usually happens when connections is refused) due to lack of nil check by centralizing response.Body.Close() behavior.
1 parent 25faf92 commit ac135ab

File tree

13 files changed

+204
-68
lines changed

13 files changed

+204
-68
lines changed

management/client/rest/accounts.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ func (a *AccountsAPI) List(ctx context.Context) ([]api.Account, error) {
2020
if err != nil {
2121
return nil, err
2222
}
23-
defer resp.Body.Close()
23+
if resp.Body != nil {
24+
defer resp.Body.Close()
25+
}
2426
ret, err := parseResponse[[]api.Account](resp)
2527
return ret, err
2628
}
@@ -36,7 +38,9 @@ func (a *AccountsAPI) Update(ctx context.Context, accountID string, request api.
3638
if err != nil {
3739
return nil, err
3840
}
39-
defer resp.Body.Close()
41+
if resp.Body != nil {
42+
defer resp.Body.Close()
43+
}
4044
ret, err := parseResponse[api.Account](resp)
4145
return &ret, err
4246
}
@@ -48,7 +52,9 @@ func (a *AccountsAPI) Delete(ctx context.Context, accountID string) error {
4852
if err != nil {
4953
return err
5054
}
51-
defer resp.Body.Close()
55+
if resp.Body != nil {
56+
defer resp.Body.Close()
57+
}
5258

5359
return nil
5460
}

management/client/rest/dns.go

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ func (a *DNSAPI) ListNameserverGroups(ctx context.Context) ([]api.NameserverGrou
2020
if err != nil {
2121
return nil, err
2222
}
23-
defer resp.Body.Close()
23+
if resp.Body != nil {
24+
defer resp.Body.Close()
25+
}
2426
ret, err := parseResponse[[]api.NameserverGroup](resp)
2527
return ret, err
2628
}
@@ -32,7 +34,9 @@ func (a *DNSAPI) GetNameserverGroup(ctx context.Context, nameserverGroupID strin
3234
if err != nil {
3335
return nil, err
3436
}
35-
defer resp.Body.Close()
37+
if resp.Body != nil {
38+
defer resp.Body.Close()
39+
}
3640
ret, err := parseResponse[api.NameserverGroup](resp)
3741
return &ret, err
3842
}
@@ -48,7 +52,9 @@ func (a *DNSAPI) CreateNameserverGroup(ctx context.Context, request api.PostApiD
4852
if err != nil {
4953
return nil, err
5054
}
51-
defer resp.Body.Close()
55+
if resp.Body != nil {
56+
defer resp.Body.Close()
57+
}
5258
ret, err := parseResponse[api.NameserverGroup](resp)
5359
return &ret, err
5460
}
@@ -64,7 +70,9 @@ func (a *DNSAPI) UpdateNameserverGroup(ctx context.Context, nameserverGroupID st
6470
if err != nil {
6571
return nil, err
6672
}
67-
defer resp.Body.Close()
73+
if resp.Body != nil {
74+
defer resp.Body.Close()
75+
}
6876
ret, err := parseResponse[api.NameserverGroup](resp)
6977
return &ret, err
7078
}
@@ -76,7 +84,9 @@ func (a *DNSAPI) DeleteNameserverGroup(ctx context.Context, nameserverGroupID st
7684
if err != nil {
7785
return err
7886
}
79-
defer resp.Body.Close()
87+
if resp.Body != nil {
88+
defer resp.Body.Close()
89+
}
8090

8191
return nil
8292
}
@@ -88,7 +98,9 @@ func (a *DNSAPI) GetSettings(ctx context.Context) (*api.DNSSettings, error) {
8898
if err != nil {
8999
return nil, err
90100
}
91-
defer resp.Body.Close()
101+
if resp.Body != nil {
102+
defer resp.Body.Close()
103+
}
92104
ret, err := parseResponse[api.DNSSettings](resp)
93105
return &ret, err
94106
}
@@ -104,7 +116,9 @@ func (a *DNSAPI) UpdateSettings(ctx context.Context, request api.PutApiDnsSettin
104116
if err != nil {
105117
return nil, err
106118
}
107-
defer resp.Body.Close()
119+
if resp.Body != nil {
120+
defer resp.Body.Close()
121+
}
108122
ret, err := parseResponse[api.DNSSettings](resp)
109123
return &ret, err
110124
}

management/client/rest/events.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ func (a *EventsAPI) List(ctx context.Context) ([]api.Event, error) {
1818
if err != nil {
1919
return nil, err
2020
}
21-
defer resp.Body.Close()
21+
if resp.Body != nil {
22+
defer resp.Body.Close()
23+
}
2224
ret, err := parseResponse[[]api.Event](resp)
2325
return ret, err
2426
}

management/client/rest/geo.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ func (a *GeoLocationAPI) ListCountries(ctx context.Context) ([]api.Country, erro
1818
if err != nil {
1919
return nil, err
2020
}
21-
defer resp.Body.Close()
21+
if resp.Body != nil {
22+
defer resp.Body.Close()
23+
}
2224
ret, err := parseResponse[[]api.Country](resp)
2325
return ret, err
2426
}
@@ -30,7 +32,9 @@ func (a *GeoLocationAPI) ListCountryCities(ctx context.Context, countryCode stri
3032
if err != nil {
3133
return nil, err
3234
}
33-
defer resp.Body.Close()
35+
if resp.Body != nil {
36+
defer resp.Body.Close()
37+
}
3438
ret, err := parseResponse[[]api.City](resp)
3539
return ret, err
3640
}

management/client/rest/groups.go

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ func (a *GroupsAPI) List(ctx context.Context) ([]api.Group, error) {
2020
if err != nil {
2121
return nil, err
2222
}
23-
defer resp.Body.Close()
23+
if resp.Body != nil {
24+
defer resp.Body.Close()
25+
}
2426
ret, err := parseResponse[[]api.Group](resp)
2527
return ret, err
2628
}
@@ -32,7 +34,9 @@ func (a *GroupsAPI) Get(ctx context.Context, groupID string) (*api.Group, error)
3234
if err != nil {
3335
return nil, err
3436
}
35-
defer resp.Body.Close()
37+
if resp.Body != nil {
38+
defer resp.Body.Close()
39+
}
3640
ret, err := parseResponse[api.Group](resp)
3741
return &ret, err
3842
}
@@ -48,7 +52,9 @@ func (a *GroupsAPI) Create(ctx context.Context, request api.PostApiGroupsJSONReq
4852
if err != nil {
4953
return nil, err
5054
}
51-
defer resp.Body.Close()
55+
if resp.Body != nil {
56+
defer resp.Body.Close()
57+
}
5258
ret, err := parseResponse[api.Group](resp)
5359
return &ret, err
5460
}
@@ -64,7 +70,9 @@ func (a *GroupsAPI) Update(ctx context.Context, groupID string, request api.PutA
6470
if err != nil {
6571
return nil, err
6672
}
67-
defer resp.Body.Close()
73+
if resp.Body != nil {
74+
defer resp.Body.Close()
75+
}
6876
ret, err := parseResponse[api.Group](resp)
6977
return &ret, err
7078
}
@@ -76,7 +84,9 @@ func (a *GroupsAPI) Delete(ctx context.Context, groupID string) error {
7684
if err != nil {
7785
return err
7886
}
79-
defer resp.Body.Close()
87+
if resp.Body != nil {
88+
defer resp.Body.Close()
89+
}
8090

8191
return nil
8292
}

management/client/rest/networks.go

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ func (a *NetworksAPI) List(ctx context.Context) ([]api.Network, error) {
2020
if err != nil {
2121
return nil, err
2222
}
23-
defer resp.Body.Close()
23+
if resp.Body != nil {
24+
defer resp.Body.Close()
25+
}
2426
ret, err := parseResponse[[]api.Network](resp)
2527
return ret, err
2628
}
@@ -32,7 +34,9 @@ func (a *NetworksAPI) Get(ctx context.Context, networkID string) (*api.Network,
3234
if err != nil {
3335
return nil, err
3436
}
35-
defer resp.Body.Close()
37+
if resp.Body != nil {
38+
defer resp.Body.Close()
39+
}
3640
ret, err := parseResponse[api.Network](resp)
3741
return &ret, err
3842
}
@@ -48,7 +52,9 @@ func (a *NetworksAPI) Create(ctx context.Context, request api.PostApiNetworksJSO
4852
if err != nil {
4953
return nil, err
5054
}
51-
defer resp.Body.Close()
55+
if resp.Body != nil {
56+
defer resp.Body.Close()
57+
}
5258
ret, err := parseResponse[api.Network](resp)
5359
return &ret, err
5460
}
@@ -64,7 +70,9 @@ func (a *NetworksAPI) Update(ctx context.Context, networkID string, request api.
6470
if err != nil {
6571
return nil, err
6672
}
67-
defer resp.Body.Close()
73+
if resp.Body != nil {
74+
defer resp.Body.Close()
75+
}
6876
ret, err := parseResponse[api.Network](resp)
6977
return &ret, err
7078
}
@@ -76,7 +84,9 @@ func (a *NetworksAPI) Delete(ctx context.Context, networkID string) error {
7684
if err != nil {
7785
return err
7886
}
79-
defer resp.Body.Close()
87+
if resp.Body != nil {
88+
defer resp.Body.Close()
89+
}
8090

8191
return nil
8292
}
@@ -102,7 +112,9 @@ func (a *NetworkResourcesAPI) List(ctx context.Context) ([]api.NetworkResource,
102112
if err != nil {
103113
return nil, err
104114
}
105-
defer resp.Body.Close()
115+
if resp.Body != nil {
116+
defer resp.Body.Close()
117+
}
106118
ret, err := parseResponse[[]api.NetworkResource](resp)
107119
return ret, err
108120
}
@@ -114,7 +126,9 @@ func (a *NetworkResourcesAPI) Get(ctx context.Context, networkResourceID string)
114126
if err != nil {
115127
return nil, err
116128
}
117-
defer resp.Body.Close()
129+
if resp.Body != nil {
130+
defer resp.Body.Close()
131+
}
118132
ret, err := parseResponse[api.NetworkResource](resp)
119133
return &ret, err
120134
}
@@ -130,7 +144,9 @@ func (a *NetworkResourcesAPI) Create(ctx context.Context, request api.PostApiNet
130144
if err != nil {
131145
return nil, err
132146
}
133-
defer resp.Body.Close()
147+
if resp.Body != nil {
148+
defer resp.Body.Close()
149+
}
134150
ret, err := parseResponse[api.NetworkResource](resp)
135151
return &ret, err
136152
}
@@ -146,7 +162,9 @@ func (a *NetworkResourcesAPI) Update(ctx context.Context, networkResourceID stri
146162
if err != nil {
147163
return nil, err
148164
}
149-
defer resp.Body.Close()
165+
if resp.Body != nil {
166+
defer resp.Body.Close()
167+
}
150168
ret, err := parseResponse[api.NetworkResource](resp)
151169
return &ret, err
152170
}
@@ -158,7 +176,9 @@ func (a *NetworkResourcesAPI) Delete(ctx context.Context, networkResourceID stri
158176
if err != nil {
159177
return err
160178
}
161-
defer resp.Body.Close()
179+
if resp.Body != nil {
180+
defer resp.Body.Close()
181+
}
162182

163183
return nil
164184
}
@@ -184,7 +204,9 @@ func (a *NetworkRoutersAPI) List(ctx context.Context) ([]api.NetworkRouter, erro
184204
if err != nil {
185205
return nil, err
186206
}
187-
defer resp.Body.Close()
207+
if resp.Body != nil {
208+
defer resp.Body.Close()
209+
}
188210
ret, err := parseResponse[[]api.NetworkRouter](resp)
189211
return ret, err
190212
}
@@ -196,7 +218,9 @@ func (a *NetworkRoutersAPI) Get(ctx context.Context, networkRouterID string) (*a
196218
if err != nil {
197219
return nil, err
198220
}
199-
defer resp.Body.Close()
221+
if resp.Body != nil {
222+
defer resp.Body.Close()
223+
}
200224
ret, err := parseResponse[api.NetworkRouter](resp)
201225
return &ret, err
202226
}
@@ -212,7 +236,9 @@ func (a *NetworkRoutersAPI) Create(ctx context.Context, request api.PostApiNetwo
212236
if err != nil {
213237
return nil, err
214238
}
215-
defer resp.Body.Close()
239+
if resp.Body != nil {
240+
defer resp.Body.Close()
241+
}
216242
ret, err := parseResponse[api.NetworkRouter](resp)
217243
return &ret, err
218244
}
@@ -228,7 +254,9 @@ func (a *NetworkRoutersAPI) Update(ctx context.Context, networkRouterID string,
228254
if err != nil {
229255
return nil, err
230256
}
231-
defer resp.Body.Close()
257+
if resp.Body != nil {
258+
defer resp.Body.Close()
259+
}
232260
ret, err := parseResponse[api.NetworkRouter](resp)
233261
return &ret, err
234262
}
@@ -240,7 +268,9 @@ func (a *NetworkRoutersAPI) Delete(ctx context.Context, networkRouterID string)
240268
if err != nil {
241269
return err
242270
}
243-
defer resp.Body.Close()
271+
if resp.Body != nil {
272+
defer resp.Body.Close()
273+
}
244274

245275
return nil
246276
}

0 commit comments

Comments
 (0)