aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordequis <dx@dxzone.com.ar>2016-05-09 21:01:18 -0300
committerdequis <dx@dxzone.com.ar>2016-05-09 21:01:18 -0300
commit9ce0a4fd28acaa249b7a4f2f132416dd8448e586 (patch)
treef0e220896e058583b15118a26f7a04d8f07c55b5
parenta72b468cdbd3cc4a35ef1bbf16b3b3e064444254 (diff)
downloadbitlbee-facebook-9ce0a4fd28acaa249b7a4f2f132416dd8448e586.tar.gz
bitlbee-facebook-9ce0a4fd28acaa249b7a4f2f132416dd8448e586.tar.bz2
bitlbee-facebook-9ce0a4fd28acaa249b7a4f2f132416dd8448e586.tar.xz
mqtt: Fix double free on ssl handshake failures
Normally, bitlbee's ssl_handshake calls the callback with an error status and calls ssl_disconnect(). In this plugin fb_mqtt_error(), calls fb_mqtt_close(), which called ssl_disconnect() on priv->ssl. This fix prevents that double ssl_disconnect() by setting priv->ssl to null, so that fb_mqtt_close() cleans everything except that. Fixes #82
-rw-r--r--facebook/facebook-mqtt.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/facebook/facebook-mqtt.c b/facebook/facebook-mqtt.c
index 8549a1c..9610bbd 100644
--- a/facebook/facebook-mqtt.c
+++ b/facebook/facebook-mqtt.c
@@ -565,6 +565,9 @@ fb_mqtt_cb_open(gpointer data, gint error, gpointer ssl,
gint fd;
if ((ssl == NULL) || (error != SSL_OK)) {
+ /* Set this to null to avoid freeing it in fb_mqtt_close() */
+ priv->ssl = NULL;
+
fb_mqtt_error(mqtt, FB_MQTT_ERROR_GENERAL, "Failed to connect");
return FALSE;
}