Fix memory leak in mosquitto_tls_opts_set()
When calling mosquitto_tls_opts_set() multiple time in a row on the same mosquitto context (Example: trying to reconnect to mqtt broker), some of the tls options are not free, resulting in a memory leak. The TLS options (tls_version, tls_ciphers) must be free before being set. Signed-off-by: Guillaume PELLEGRINO <guillaume.pellegrino@yahoo.com>
This commit is contained in:
parent
7ff2198c7d
commit
9018f12dfc
@ -228,19 +228,23 @@ int mosquitto_tls_opts_set(struct mosquitto *mosq, int cert_reqs, const char *tl
|
|||||||
|| !strcasecmp(tls_version, "tlsv1.2")
|
|| !strcasecmp(tls_version, "tlsv1.2")
|
||||||
|| !strcasecmp(tls_version, "tlsv1.1")){
|
|| !strcasecmp(tls_version, "tlsv1.1")){
|
||||||
|
|
||||||
|
mosquitto__free(mosq->tls_version);
|
||||||
mosq->tls_version = mosquitto__strdup(tls_version);
|
mosq->tls_version = mosquitto__strdup(tls_version);
|
||||||
if(!mosq->tls_version) return MOSQ_ERR_NOMEM;
|
if(!mosq->tls_version) return MOSQ_ERR_NOMEM;
|
||||||
}else{
|
}else{
|
||||||
return MOSQ_ERR_INVAL;
|
return MOSQ_ERR_INVAL;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
|
mosquitto__free(mosq->tls_version);
|
||||||
mosq->tls_version = mosquitto__strdup("tlsv1.2");
|
mosq->tls_version = mosquitto__strdup("tlsv1.2");
|
||||||
if(!mosq->tls_version) return MOSQ_ERR_NOMEM;
|
if(!mosq->tls_version) return MOSQ_ERR_NOMEM;
|
||||||
}
|
}
|
||||||
if(ciphers){
|
if(ciphers){
|
||||||
|
mosquitto__free(mosq->tls_ciphers);
|
||||||
mosq->tls_ciphers = mosquitto__strdup(ciphers);
|
mosq->tls_ciphers = mosquitto__strdup(ciphers);
|
||||||
if(!mosq->tls_ciphers) return MOSQ_ERR_NOMEM;
|
if(!mosq->tls_ciphers) return MOSQ_ERR_NOMEM;
|
||||||
}else{
|
}else{
|
||||||
|
mosquitto__free(mosq->tls_ciphers);
|
||||||
mosq->tls_ciphers = NULL;
|
mosq->tls_ciphers = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user