Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:rkwasny
php
php-5.1.2-zend-fix.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File php-5.1.2-zend-fix.patch of Package php
--- Zend/zend_execute_API.c +++ Zend/zend_execute_API.c @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_execute_API.c,v 1.331.2.11 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_execute_API.c,v 1.331.2.13 2006/01/22 22:14:32 helly Exp $ */ #include <stdio.h> #include <signal.h> @@ -582,6 +582,7 @@ zend_op **original_opline_ptr; zend_class_entry *current_scope; zend_class_entry *calling_scope = NULL; + zend_class_entry *check_scope_or_static = NULL; zval *current_this; zend_execute_data execute_data; zval *method_name; @@ -713,16 +714,18 @@ if (calling_scope && (colon = strstr(fname, "::")) != NULL) { int clen = colon - fname; int mlen = fname_len - clen - 2; - zend_class_entry **pce, *ce_child; + zend_class_entry **pce, *ce_child = NULL; if (zend_lookup_class(fname, clen, &pce TSRMLS_CC) == SUCCESS) { ce_child = *pce; } else { char *lcname = zend_str_tolower_dup(fname, clen); /* caution: lcname is not '\0' terminated */ - if (clen == sizeof("self") - 1 && memcmp(lcname, "self", sizeof("self") - 1) == 0) { - ce_child = EG(active_op_array) ? EG(active_op_array)->scope : NULL; - } else if (clen == sizeof("parent") - 1 && memcmp(lcname, "parent", sizeof("parent") - 1) == 0 && EG(active_op_array)->scope) { - ce_child = EG(active_op_array) && EG(active_op_array)->scope ? EG(scope)->parent : NULL; + if (calling_scope) { + if (clen == sizeof("self") - 1 && memcmp(lcname, "self", sizeof("self") - 1) == 0) { + ce_child = EG(active_op_array) ? EG(active_op_array)->scope : NULL; + } else if (clen == sizeof("parent") - 1 && memcmp(lcname, "parent", sizeof("parent") - 1) == 0 && EG(active_op_array)->scope) { + ce_child = EG(active_op_array) && EG(active_op_array)->scope ? EG(scope)->parent : NULL; + } } efree(lcname); } @@ -730,10 +733,7 @@ zend_error(E_ERROR, "Cannot call method %s() or method does not exist", fname); return FAILURE; } - if (!instanceof_function(calling_scope, ce_child TSRMLS_CC)) { - zend_error(E_ERROR, "Cannot call method %s() of class %s which is not a derived from %s", fname, ce_child->name, calling_scope->name); - return 0; - } + check_scope_or_static = calling_scope; fci->function_table = &ce_child->function_table; calling_scope = ce_child; fname = fname + clen + 2; @@ -760,6 +760,12 @@ EX(function_state).function = zend_std_get_static_method(calling_scope, function_name_lc, fname_len TSRMLS_CC); efree(function_name_lc); + if (check_scope_or_static && EX(function_state).function + && !(EX(function_state).function->common.fn_flags & ZEND_ACC_STATIC) + && !instanceof_function(check_scope_or_static, calling_scope TSRMLS_CC)) { + zend_error(E_ERROR, "Cannot call method %s() of class %s which is not a derived from %s", fname, calling_scope->name, check_scope_or_static->name); + return 0; + } } else { char *function_name_lc = zend_str_tolower_dup(fname, fname_len);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor