summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornikita2206 <inefedor@gmail.com>2015-07-09 18:43:50 +0400
committerNikita Popov <nikic@php.net>2015-07-16 22:31:36 +0200
commitd8a6130660cd8c6cd99df5a84ae4c70469cac0bc (patch)
tree2cf4709ab3b0a10bac68e1371298c91bd03293d9
parent9ee52ca3aead13d77eb7bbb3b4808adf426cae86 (diff)
downloadphp-git-d8a6130660cd8c6cd99df5a84ae4c70469cac0bc.tar.gz
Handle empty (NULL) stmt in ast_export
-rw-r--r--Zend/tests/assert/expect_empty_stmt_bug.phpt11
-rw-r--r--Zend/zend_ast.c4
2 files changed, 15 insertions, 0 deletions
diff --git a/Zend/tests/assert/expect_empty_stmt_bug.phpt b/Zend/tests/assert/expect_empty_stmt_bug.phpt
new file mode 100644
index 0000000000..f5dcff3ba5
--- /dev/null
+++ b/Zend/tests/assert/expect_empty_stmt_bug.phpt
@@ -0,0 +1,11 @@
+--TEST--
+Empty statement in assert() shouldn't segfault
+--FILE--
+<?php
+
+assert((function () { return true;; })());
+echo "ok";
+
+?>
+--EXPECT--
+ok
diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c
index 714a1443b0..d36ce0b2ad 100644
--- a/Zend/zend_ast.c
+++ b/Zend/zend_ast.c
@@ -783,6 +783,10 @@ static void zend_ast_export_var_list(smart_str *str, zend_ast_list *list, int in
static void zend_ast_export_stmt(smart_str *str, zend_ast *ast, int indent)
{
+ if (!ast) {
+ return;
+ }
+
if (ast->kind == ZEND_AST_STMT_LIST ||
ast->kind == ZEND_AST_TRAIT_ADAPTATIONS) {
zend_ast_list *list = (zend_ast_list*)ast;