From 511f8ba152564535c98932bee9681b7c49d3cc41 Mon Sep 17 00:00:00 2001 From: Artem Mamonov Date: Tue, 18 Oct 2016 10:48:18 +0000 Subject: [PATCH 1/4] fixed segfault in PHP7 in message destruct --- mosquitto_message.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mosquitto_message.c b/mosquitto_message.c index 9c43a68..a337767 100644 --- a/mosquitto_message.c +++ b/mosquitto_message.c @@ -487,6 +487,9 @@ void php_mosquitto_message_add_property(HashTable *h, const char *name, size_t n static void mosquitto_message_object_destroy(zend_object *object TSRMLS_DC) { mosquitto_message_object *message = mosquitto_message_object_from_zend_object(object); +#ifdef ZEND_ENGINE_3 + zend_object_std_dtor(object); +#else zend_hash_destroy(message->std.properties); FREE_HASHTABLE(message->std.properties); @@ -499,6 +502,7 @@ static void mosquitto_message_object_destroy(zend_object *object TSRMLS_DC) } efree(object); +#endif } #ifdef ZEND_ENGINE_3 From cb35d7bcd5f5953b90051d934c06bba848c3bd85 Mon Sep 17 00:00:00 2001 From: Artem Mamonov Date: Tue, 18 Oct 2016 10:55:23 +0000 Subject: [PATCH 2/4] change default keepalive 0 -> 60 in connect function, as written in docs --- mosquitto.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mosquitto.c b/mosquitto.c index 5b8ce48..b27d550 100644 --- a/mosquitto.c +++ b/mosquitto.c @@ -385,7 +385,7 @@ PHP_METHOD(Mosquitto_Client, connect) mosquitto_strlen_type host_len, interface_len; int retval; zend_long port = 1883; - zend_long keepalive = 0; + zend_long keepalive = 60; PHP_MOSQUITTO_ERROR_HANDLING(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lls!", From 4141a12802a33f69f9f0593de69cb864ad646863 Mon Sep 17 00:00:00 2001 From: Artem Mamonov Date: Tue, 18 Oct 2016 16:27:26 +0000 Subject: [PATCH 3/4] fixed memory leaks --- mosquitto_message.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mosquitto_message.c b/mosquitto_message.c index a337767..29ce037 100644 --- a/mosquitto_message.c +++ b/mosquitto_message.c @@ -492,7 +492,7 @@ static void mosquitto_message_object_destroy(zend_object *object TSRMLS_DC) #else zend_hash_destroy(message->std.properties); FREE_HASHTABLE(message->std.properties); - +#endif if (message->owned_topic == 1) { efree(message->message.topic); } @@ -502,7 +502,6 @@ static void mosquitto_message_object_destroy(zend_object *object TSRMLS_DC) } efree(object); -#endif } #ifdef ZEND_ENGINE_3 From 773e6c414bf9ffa69f9d5d9b3d511c180ba69496 Mon Sep 17 00:00:00 2001 From: Artem Mamonov Date: Tue, 18 Oct 2016 21:46:19 +0000 Subject: [PATCH 4/4] fixed another memory leak, produced by mosquitto_message_copy in message callback --- mosquitto.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/mosquitto.c b/mosquitto.c index b27d550..dc9cba2 100644 --- a/mosquitto.c +++ b/mosquitto.c @@ -1147,7 +1147,12 @@ PHP_MOSQUITTO_API void php_mosquitto_message_callback(struct mosquitto *mosq, vo object_init_ex(message_zval, mosquitto_ce_message); message_object = mosquitto_message_object_from_zend_object(Z_OBJ_P(message_zval)); - mosquitto_message_copy(&message_object->message, message); + message_object->message.mid = message->mid; + message_object->message.qos = message->qos; + message_object->message.retain = message->retain; + message_object->message.topic = message->topic; + message_object->message.payload = message->payload; + message_object->message.payloadlen = message->payloadlen; object->message_callback.params = params; object->message_callback.param_count = 1;