diff options
author | Bo Yang <teboring@google.com> | 2017-12-05 18:29:51 -0800 |
---|---|---|
committer | Bo Yang <teboring@google.com> | 2017-12-06 10:40:07 -0800 |
commit | 212563d756d50a70272d42d7f8b6374ce5a86317 (patch) | |
tree | d1dcbe50e65646f6b038f454c9527ba15d1b8e47 /php/ext/google/protobuf/message.c | |
parent | 3b7a5f451546888ad96aaa143ef86fea904a03ec (diff) | |
download | protobuf-212563d756d50a70272d42d7f8b6374ce5a86317.tar.gz protobuf-212563d756d50a70272d42d7f8b6374ce5a86317.tar.bz2 protobuf-212563d756d50a70272d42d7f8b6374ce5a86317.zip |
Fix memory leak in php7
Diffstat (limited to 'php/ext/google/protobuf/message.c')
-rw-r--r-- | php/ext/google/protobuf/message.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/php/ext/google/protobuf/message.c b/php/ext/google/protobuf/message.c index b11c7215..cf75d979 100644 --- a/php/ext/google/protobuf/message.c +++ b/php/ext/google/protobuf/message.c @@ -374,10 +374,11 @@ PHP_METHOD(Message, whichOneof) { LOWER_FIELD) \ PHP_METHOD(UPPER_CLASS, get##UPPER_FIELD) { \ zval member; \ - PHP_PROTO_ZVAL_STRING(&member, LOWER_FIELD, 0); \ + PHP_PROTO_ZVAL_STRING(&member, LOWER_FIELD, 1); \ PHP_PROTO_FAKE_SCOPE_BEGIN(LOWER_CLASS##_type); \ zval* value = message_get_property_internal(getThis(), &member TSRMLS_CC); \ PHP_PROTO_FAKE_SCOPE_END; \ + zval_dtor(&member); \ PHP_PROTO_RETVAL_ZVAL(value); \ } \ PHP_METHOD(UPPER_CLASS, set##UPPER_FIELD) { \ @@ -387,8 +388,9 @@ PHP_METHOD(Message, whichOneof) { return; \ } \ zval member; \ - PHP_PROTO_ZVAL_STRING(&member, LOWER_FIELD, 0); \ + PHP_PROTO_ZVAL_STRING(&member, LOWER_FIELD, 1); \ message_set_property_internal(getThis(), &member, value TSRMLS_CC); \ + zval_dtor(&member); \ PHP_PROTO_RETVAL_ZVAL(getThis()); \ } @@ -396,11 +398,12 @@ PHP_METHOD(Message, whichOneof) { LOWER_FIELD) \ PHP_METHOD(UPPER_CLASS, get##UPPER_FIELD) { \ zval member; \ - PHP_PROTO_ZVAL_STRING(&member, LOWER_FIELD, 0); \ + PHP_PROTO_ZVAL_STRING(&member, LOWER_FIELD, 1); \ PHP_PROTO_FAKE_SCOPE_BEGIN(LOWER_CLASS##_type); \ message_get_oneof_property_internal(getThis(), &member, \ return_value TSRMLS_CC); \ PHP_PROTO_FAKE_SCOPE_END; \ + zval_dtor(&member); \ } \ PHP_METHOD(UPPER_CLASS, set##UPPER_FIELD) { \ zval* value = NULL; \ @@ -409,8 +412,9 @@ PHP_METHOD(Message, whichOneof) { return; \ } \ zval member; \ - PHP_PROTO_ZVAL_STRING(&member, LOWER_FIELD, 0); \ + PHP_PROTO_ZVAL_STRING(&member, LOWER_FIELD, 1); \ message_set_property_internal(getThis(), &member, value TSRMLS_CC); \ + zval_dtor(&member); \ PHP_PROTO_RETVAL_ZVAL(getThis()); \ } |