cvs: ZendEngine2 / zend_builtin_functions.c
[email protected] ("Ilia Alshanetsky") Mon, 08 Jun 2009 01:27:11 -0000
| Newsgroups | php.zend-engine.cvs |
|---|---|
| Message-ID | <cvsiliaa1244424431@cvsserver> |
iliaa Mon Jun 8 01:27:11 2009 UTC
Modified files:
/ZendEngine2 zend_builtin_functions.c
Log:
MFB: Fixed bug #44827 (define() is missing error checks for class constants)
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_builtin_functions.c?r1=1.406&r2=1.407&diff_format=u
Index: ZendEngine2/zend_builtin_functions.c
diff -u ZendEngine2/zend_builtin_functions.c:1.406 ZendEngine2/zend_builtin_functions.c:1.407
--- ZendEngine2/zend_builtin_functions.c:1.406 Fri Jun 5 18:50:10 2009
+++ ZendEngine2/zend_builtin_functions.c Mon Jun 8 01:27:11 2009
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_builtin_functions.c,v 1.406 2009/06/05 18:50:10 mattwil Exp $ */
+/* $Id: zend_builtin_functions.c,v 1.407 2009/06/08 01:27:11 iliaa Exp $ */
#include "zend.h"
#include "zend_API.h"
@@ -623,6 +623,7 @@
zend_bool non_cs = 0;
int case_sensitive = CONST_CS;
zend_constant c;
+ char *p;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "tz|b", &name, &name_len, &name_type, &val, &non_cs) == FAILURE) {
return;
@@ -632,6 +633,34 @@
case_sensitive = 0;
}
+ /* class constant, check if there is name and make sure class is valid & exists */
+ if ((p = zend_memnstr(name, "::", sizeof("::") - 1, name + name_len))) {
+ char *class_name;
+ int found;
+ zend_class_entry **ce;
+ ALLOCA_FLAG(use_heap)
+
+ if (p == (name + name_len - sizeof("::") + 1)) {
+ zend_error(E_WARNING, "Class constant must have a name");
+ RETURN_FALSE;
+ } else if (p == name) {
+ zend_error(E_WARNING, "Missing class name");
+ RETURN_FALSE;
+ }
+
+ class_name = do_alloca((p - name + 1), use_heap);
+ zend_str_tolower_copy(class_name, name, (p - name));
+
+ found = zend_hash_find(EG(class_table), class_name, p - name + 1, (void **) &ce);
+
+ if (found != SUCCESS) {
+ zend_error(E_WARNING, "Class '%s' does not exists", class_name);
+ free_alloca(class_name, use_heap);
+ RETURN_FALSE;
+ }
+ free_alloca(class_name, use_heap);
+ }
+
repeat:
switch (Z_TYPE_P(val)) {
case IS_LONG: