Most fields should be zero when reusing a connection. In particular, when an
outgoing connection to a node which is reachable on more than one address is
made, the second connection to that node will have status.encryptout set but
outctx will be NULL, causing a NULL pointer dereference when
EVP_EncryptUpdate() is called in send_meta() when it shouldn't.
c->hischallenge = NULL;
c->outbuf = NULL;
+ c->status.pinged = false;
+ c->status.active = false;
+ c->status.connecting = false;
+ c->status.timeout = false;
+ c->status.encryptout = false;
+ c->status.decryptin = false;
+ c->status.mst = false;
+
+ c->options = 0;
c->buflen = 0;
c->reqlen = 0;
c->tcplen = 0;
c->outbuflen = 0;
c->outbufsize = 0;
c->outbufstart = 0;
+ c->last_ping_time = 0;
+ c->last_flushed_time = 0;
if(c->inctx) {
EVP_CIPHER_CTX_cleanup(c->inctx);
unsigned int pinged:1; /* sent ping */
unsigned int active:1; /* 1 if active.. */
unsigned int connecting:1; /* 1 if we are waiting for a non-blocking connect() to finish */
- unsigned int termreq:1; /* the termination of this connection was requested */
+ unsigned int unused_termreq:1; /* the termination of this connection was requested */
unsigned int remove:1; /* Set to 1 if you want this connection removed */
unsigned int timeout:1; /* 1 if gotten timeout */
unsigned int encryptout:1; /* 1 if we can encrypt outgoing traffic */