示例#1
0
U_CFUNC zend_function *IntlPartsIterator_get_method(zend_object **object_ptr, zend_string *method, const zval *key)
{
	zend_function *ret;
	zend_string *lc_method_name;
	ALLOCA_FLAG(use_heap);

	if (key == NULL) {
		STR_ALLOCA_ALLOC(lc_method_name, method->len, use_heap);
		zend_str_tolower_copy(lc_method_name->val, method->val, method->len);
	} else {
		lc_method_name = Z_STR_P(key);
	}

	if (method->len == sizeof("getrulestatus") - 1
			&& memcmp("getrulestatus", lc_method_name->val, lc_method_name->len) == 0) {
		IntlIterator_object *obj = php_intl_iterator_fetch_object(*object_ptr);
		if (obj->iterator && !Z_ISUNDEF(obj->iterator->data)) {
			zval *break_iter_zv = &obj->iterator->data;
			*object_ptr = Z_OBJ_P(break_iter_zv);
			ret = Z_OBJ_HANDLER_P(break_iter_zv, get_method)(object_ptr, method, key);
			goto end;
		}
	}

	ret = std_object_handlers.get_method(object_ptr, method, key);

end:
	if (key == NULL) {
	 	STR_ALLOCA_FREE(lc_method_name, use_heap);
	}

	return ret;
}
static inline int unserialize_allowed_class(zend_string *class_name, HashTable *classes)
{
	zend_string *lcname;
	int res;
	ALLOCA_FLAG(use_heap)

	if(classes == NULL) {
		return 1;
	}
	if(!zend_hash_num_elements(classes)) {
		return 0;
	}

	STR_ALLOCA_ALLOC(lcname, class_name->len, use_heap);
	zend_str_tolower_copy(lcname->val, class_name->val, class_name->len);
	res = zend_hash_exists(classes, lcname);
	STR_ALLOCA_FREE(lcname, use_heap);
	return res;
}