summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Pena <felipe@php.net>2008-11-11 16:15:53 +0000
committerFelipe Pena <felipe@php.net>2008-11-11 16:15:53 +0000
commit9b894e6e62f2af312f0a193a2039897eec3d0928 (patch)
tree11642e979f7f63849bbd46472708ef990c8e5133
parent9178503610d4ec57409005863558fa2b32313ad2 (diff)
downloadphp-git-9b894e6e62f2af312f0a193a2039897eec3d0928.tar.gz
- Fixed bug #46546 (Segmentation fault when using declare statement with non-string value)
# This issue only happens in this branch
-rw-r--r--Zend/tests/declare_001.phpt16
-rw-r--r--Zend/zend_compile.c3
2 files changed, 18 insertions, 1 deletions
diff --git a/Zend/tests/declare_001.phpt b/Zend/tests/declare_001.phpt
new file mode 100644
index 0000000000..8f6f733479
--- /dev/null
+++ b/Zend/tests/declare_001.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Testing declare statement with several type values
+--FILE--
+<?php
+
+declare(encoding = 1);
+declare(encoding = 1123131232131312321);
+declare(encoding = NULL);
+declare(encoding = M_PI);
+declare(encoding = 'utf-8');
+
+print 'DONE';
+
+?>
+--EXPECT--
+DONE
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 5d1c583fb1..90dcad362e 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -4770,12 +4770,13 @@ void zend_do_declare_stmt(znode *var, znode *val TSRMLS_DC)
zend_multibyte_yyinput_again(old_input_filter, old_encoding TSRMLS_CC);
}
}
+ efree(val->u.constant.value.str.val);
#else /* !ZEND_MULTIBYTE */
} else if (!zend_binary_strcasecmp(var->u.constant.value.str.val, var->u.constant.value.str.len, "encoding", sizeof("encoding")-1)) {
/* Do not generate any kind of warning for encoding declares */
/* zend_error(E_COMPILE_WARNING, "Declare encoding [%s] not supported", val->u.constant.value.str.val); */
+ zval_dtor(&val->u.constant);
#endif /* ZEND_MULTIBYTE */
- efree(val->u.constant.value.str.val);
} else {
zend_error(E_COMPILE_WARNING, "Unsupported declare '%s'", var->u.constant.value.str.val);
zval_dtor(&val->u.constant);