Skip to content

Commit

Permalink
rpclient: fix masked error causing crash after max retries
Browse files Browse the repository at this point in the history
This commit fixes the error that is masked inside the for loop's scope.
Previously after max retries the error didn't leave the for scope and
therefore httpResponse remained nil which in turn resulted in a crash.
  • Loading branch information
bhandras committed May 11, 2022
1 parent 64b8d23 commit 4d75cc9
Showing 1 changed file with 11 additions and 1 deletion.
12 changes: 11 additions & 1 deletion rpcclient/infrastructure.go
Expand Up @@ -776,8 +776,10 @@ func (c *Client) handleSendPostMessage(jReq *jsonRequest) {

tries := 10
for i := 0; i < tries; i++ {
var httpReq *http.Request

bodyReader := bytes.NewReader(jReq.marshalledJSON)
httpReq, err := http.NewRequest("POST", url, bodyReader)
httpReq, err = http.NewRequest("POST", url, bodyReader)
if err != nil {
jReq.responseChan <- &Response{result: nil, err: err}
return
Expand Down Expand Up @@ -815,6 +817,14 @@ func (c *Client) handleSendPostMessage(jReq *jsonRequest) {
return
}

// We still want to return an error if for any reason the respone
// remains empty.
if httpResponse == nil {
jReq.responseChan <- &Response{
err: fmt.Errorf("invalid response"),
}
}

// Read the raw bytes and close the response.
respBytes, err := ioutil.ReadAll(httpResponse.Body)
httpResponse.Body.Close()
Expand Down

0 comments on commit 4d75cc9

Please sign in to comment.