mirror of
https://github.com/moparisthebest/curl
synced 2024-12-24 17:18:48 -05:00
extract_if_dead: follow-up to 54b201b48c
extract_if_dead() dead is called from two functions, and only one of them should get conn->data updated and now neither call path clears it. scan-build found a case where conn->data would be NULL dereferenced in ConnectionExists() otherwise. Closes #3473
This commit is contained in:
parent
fe71b2d928
commit
bbae24c3ae
@ -965,9 +965,7 @@ static bool extract_if_dead(struct connectdata *conn,
|
|||||||
/* The protocol has a special method for checking the state of the
|
/* The protocol has a special method for checking the state of the
|
||||||
connection. Use it to check if the connection is dead. */
|
connection. Use it to check if the connection is dead. */
|
||||||
unsigned int state;
|
unsigned int state;
|
||||||
conn->data = data; /* temporary transfer for this connection to use */
|
|
||||||
state = conn->handler->connection_check(conn, CONNCHECK_ISDEAD);
|
state = conn->handler->connection_check(conn, CONNCHECK_ISDEAD);
|
||||||
conn->data = NULL; /* clear transfer again */
|
|
||||||
dead = (state & CONNRESULT_DEAD);
|
dead = (state & CONNRESULT_DEAD);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -996,6 +994,7 @@ struct prunedead {
|
|||||||
static int call_extract_if_dead(struct connectdata *conn, void *param)
|
static int call_extract_if_dead(struct connectdata *conn, void *param)
|
||||||
{
|
{
|
||||||
struct prunedead *p = (struct prunedead *)param;
|
struct prunedead *p = (struct prunedead *)param;
|
||||||
|
conn->data = p->data; /* transfer to use for this check */
|
||||||
if(extract_if_dead(conn, p->data)) {
|
if(extract_if_dead(conn, p->data)) {
|
||||||
/* stop the iteration here, pass back the connection that was extracted */
|
/* stop the iteration here, pass back the connection that was extracted */
|
||||||
p->extracted = conn;
|
p->extracted = conn;
|
||||||
|
Loading…
Reference in New Issue
Block a user