diff options
| author | Daniel Stenberg <daniel@haxx.se> | 2019-01-15 00:06:26 +0100 | 
|---|---|---|
| committer | Daniel Stenberg <daniel@haxx.se> | 2019-01-15 08:49:16 +0100 | 
| commit | bbae24c3ae3bce7518f0fbd2d260359ee6a36510 (patch) | |
| tree | 3100c47482e9ab46df3aa1851b20631a903489ed | |
| parent | fe71b2d92894f3ec050845db55065960e61ce2c1 (diff) | |
extract_if_dead: follow-up to 54b201b48c90a
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
| -rw-r--r-- | lib/url.c | 3 | 
1 files changed, 1 insertions, 2 deletions
@@ -965,9 +965,7 @@ static bool extract_if_dead(struct connectdata *conn,        /* The protocol has a special method for checking the state of the           connection. Use it to check if the connection is dead. */        unsigned int state; -      conn->data = data; /* temporary transfer for this connection to use */        state = conn->handler->connection_check(conn, CONNCHECK_ISDEAD); -      conn->data = NULL; /* clear transfer again */        dead = (state & CONNRESULT_DEAD);      }      else { @@ -996,6 +994,7 @@ struct prunedead {  static int call_extract_if_dead(struct connectdata *conn, void *param)  {    struct prunedead *p = (struct prunedead *)param; +  conn->data = p->data; /* transfer to use for this check */    if(extract_if_dead(conn, p->data)) {      /* stop the iteration here, pass back the connection that was extracted */      p->extracted = conn;  | 
