summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHannes Magnusson <bjori@php.net>2006-06-25 22:51:55 +0000
committerHannes Magnusson <bjori@php.net>2006-06-25 22:51:55 +0000
commitf4ea75f240523af73fd0c91dfdaf0ba7a57bf9ab (patch)
treecbaf9d391772ddca63d4f6282a19fb39dcd2b234
parent361c7da1598e0387a4c4226a738431407c06ffb5 (diff)
downloadphp-git-f4ea75f240523af73fd0c91dfdaf0ba7a57bf9ab.tar.gz
Added argument info
(forces user-space filters to register correct arguments) Added tests
-rw-r--r--ext/standard/tests/filters/php_user_filter_01.phpt17
-rw-r--r--ext/standard/tests/filters/php_user_filter_02.phpt12
-rw-r--r--ext/standard/tests/filters/php_user_filter_03.phpt12
-rw-r--r--ext/standard/user_filters.c26
4 files changed, 63 insertions, 4 deletions
diff --git a/ext/standard/tests/filters/php_user_filter_01.phpt b/ext/standard/tests/filters/php_user_filter_01.phpt
new file mode 100644
index 0000000000..513331e3f7
--- /dev/null
+++ b/ext/standard/tests/filters/php_user_filter_01.phpt
@@ -0,0 +1,17 @@
+--TEST--
+class php_user_filter#1
+--FILE--
+<?php
+class foo extends php_user_filter {
+ function filter($in, $out, &$consumed, $closing) {}
+ function onCreate() {}
+ function onClose() {}
+}
+class bar extends php_user_filter {
+ function filter($in, $out, &$consumed) {}
+ function onCreate() {}
+ function onClose() {}
+}
+?>
+--EXPECTF--
+Fatal error: Declaration of bar::filter() must be compatible with that of php_user_filter::filter() in %s on line %d
diff --git a/ext/standard/tests/filters/php_user_filter_02.phpt b/ext/standard/tests/filters/php_user_filter_02.phpt
new file mode 100644
index 0000000000..d72342539d
--- /dev/null
+++ b/ext/standard/tests/filters/php_user_filter_02.phpt
@@ -0,0 +1,12 @@
+--TEST--
+class php_user_filter#2
+--FILE--
+<?php
+class foo extends php_user_filter {
+ function filter($in, $out, $consumed, $closing) {}
+ function onCreate() {}
+ function onClose() {}
+}
+?>
+--EXPECTF--
+Fatal error: Declaration of foo::filter() must be compatible with that of php_user_filter::filter() in %s on line %d
diff --git a/ext/standard/tests/filters/php_user_filter_03.phpt b/ext/standard/tests/filters/php_user_filter_03.phpt
new file mode 100644
index 0000000000..4830eb964b
--- /dev/null
+++ b/ext/standard/tests/filters/php_user_filter_03.phpt
@@ -0,0 +1,12 @@
+--TEST--
+class php_user_filter#3
+--FILE--
+<?php
+class foo extends php_user_filter {
+ function filter($in, $out, &$consumed, $closing) {}
+ function onCreate($var) {}
+ function onClose() {}
+}
+?>
+--EXPECTF--
+Fatal error: Declaration of foo::onCreate() must be compatible with that of php_user_filter::onCreate() in %s on line %d
diff --git a/ext/standard/user_filters.c b/ext/standard/user_filters.c
index 66a4e51466..4112354c78 100644
--- a/ext/standard/user_filters.c
+++ b/ext/standard/user_filters.c
@@ -54,11 +54,26 @@ static int le_bucket;
PHP_FUNCTION(user_filter_nop)
{
}
+static
+ZEND_BEGIN_ARG_INFO(arginfo_php_user_filter_filter, 0)
+ ZEND_ARG_INFO(0, in)
+ ZEND_ARG_INFO(0, out)
+ ZEND_ARG_INFO(1, consumed)
+ ZEND_ARG_INFO(0, closing)
+ZEND_END_ARG_INFO()
+
+static
+ZEND_BEGIN_ARG_INFO(arginfo_php_user_filter_onCreate, 0)
+ZEND_END_ARG_INFO()
+
+static
+ZEND_BEGIN_ARG_INFO(arginfo_php_user_filter_onClose, 0)
+ZEND_END_ARG_INFO()
static zend_function_entry user_filter_class_funcs[] = {
- PHP_NAMED_FE(filter, PHP_FN(user_filter_nop), NULL)
- PHP_NAMED_FE(onCreate, PHP_FN(user_filter_nop), NULL)
- PHP_NAMED_FE(onClose, PHP_FN(user_filter_nop), NULL)
+ PHP_NAMED_FE(filter, PHP_FN(user_filter_nop), arginfo_php_user_filter_filter)
+ PHP_NAMED_FE(onCreate, PHP_FN(user_filter_nop), arginfo_php_user_filter_onCreate)
+ PHP_NAMED_FE(onClose, PHP_FN(user_filter_nop), arginfo_php_user_filter_onClose)
{ NULL, NULL, NULL }
};
@@ -66,11 +81,14 @@ static zend_class_entry user_filter_class_entry;
PHP_MINIT_FUNCTION(user_filters)
{
+ zend_class_entry *php_user_filter;
/* init the filter class ancestor */
INIT_CLASS_ENTRY(user_filter_class_entry, "php_user_filter", user_filter_class_funcs);
- if (NULL == zend_register_internal_class(&user_filter_class_entry TSRMLS_CC)) {
+ if ((php_user_filter = zend_register_internal_class(&user_filter_class_entry TSRMLS_CC)) == NULL) {
return FAILURE;
}
+ zend_declare_property_string(php_user_filter, "filtername", sizeof("filtername")-1, "", ZEND_ACC_PUBLIC TSRMLS_CC);
+ zend_declare_property_string(php_user_filter, "params", sizeof("params")-1, "", ZEND_ACC_PUBLIC TSRMLS_CC);
/* init the filter resource; it has no dtor, as streams will always clean it up
* at the correct time */