No free when construct was not done (#6483)
* No free when construct was not done This fix the segfault when some other error happens * Add more tests * Use Sub to avoid printing too much
This commit is contained in:
parent
d2d6ff51a8
commit
56988bee34
@ -89,11 +89,13 @@ static HashTable* message_get_properties(zval* object TSRMLS_DC);
|
|||||||
|
|
||||||
// Define object free method.
|
// Define object free method.
|
||||||
PHP_PROTO_OBJECT_FREE_START(MessageHeader, message)
|
PHP_PROTO_OBJECT_FREE_START(MessageHeader, message)
|
||||||
if (*(void**)intern->data != NULL) {
|
if (intern->data) {
|
||||||
stringsink_uninit_opaque(*(void**)intern->data);
|
if (*(void**)intern->data != NULL) {
|
||||||
FREE(*(void**)intern->data);
|
stringsink_uninit_opaque(*(void**)intern->data);
|
||||||
|
FREE(*(void**)intern->data);
|
||||||
|
}
|
||||||
|
FREE(intern->data);
|
||||||
}
|
}
|
||||||
FREE(intern->data);
|
|
||||||
PHP_PROTO_OBJECT_FREE_END
|
PHP_PROTO_OBJECT_FREE_END
|
||||||
|
|
||||||
PHP_PROTO_OBJECT_DTOR_START(MessageHeader, message)
|
PHP_PROTO_OBJECT_DTOR_START(MessageHeader, message)
|
||||||
|
@ -1504,4 +1504,27 @@ class GeneratedClassTest extends TestBase
|
|||||||
$m = new TestMessage();
|
$m = new TestMessage();
|
||||||
$m->setOptionalString($values[0]);
|
$m->setOptionalString($values[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#########################################################
|
||||||
|
# Test no segfault when error happens
|
||||||
|
#########################################################
|
||||||
|
|
||||||
|
function throwIntendedException()
|
||||||
|
{
|
||||||
|
throw new Exception('Intended');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException Exception
|
||||||
|
*/
|
||||||
|
public function testNoSegfaultWithError()
|
||||||
|
{
|
||||||
|
new TestMessage(['optional_int32' => $this->throwIntendedException()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNoExceptionWithVarDump()
|
||||||
|
{
|
||||||
|
$m = new Sub(['a' => 1]);
|
||||||
|
var_dump($m);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user