diff options
author | Felipe Pena <felipe@php.net> | 2008-10-07 15:28:45 +0000 |
---|---|---|
committer | Felipe Pena <felipe@php.net> | 2008-10-07 15:28:45 +0000 |
commit | d0ad1517f5e5d4e099681e3837cb71187915a549 (patch) | |
tree | ac00ebd45aa573575ed28789dcecb59f29382e6f | |
parent | 8a24cfc98ca92cb33cada2e0c70b34aaa9d629ed (diff) | |
download | php-git-d0ad1517f5e5d4e099681e3837cb71187915a549.tar.gz |
- MFH: Fixed bug #46247 (ibase_set_event_handler() is allowing to pass callback without event)
-rw-r--r-- | ext/interbase/ibase_events.c | 16 | ||||
-rw-r--r-- | ext/interbase/tests/bug46247.phpt | 36 |
2 files changed, 48 insertions, 4 deletions
diff --git a/ext/interbase/ibase_events.c b/ext/interbase/ibase_events.c index b4c204ba26..b0f5763d92 100644 --- a/ext/interbase/ibase_events.c +++ b/ext/interbase/ibase_events.c @@ -268,8 +268,8 @@ PHP_FUNCTION(ibase_set_event_handler) int link_res_id; RESET_ERRMSG; - - /* no more than 15 events */ + + /* Minimum and maximum number of arguments allowed */ if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > 17) { WRONG_PARAM_COUNT; } @@ -280,6 +280,12 @@ PHP_FUNCTION(ibase_set_event_handler) /* get a working link */ if (Z_TYPE_PP(args[0]) != IS_STRING) { + /* resource, callback, event_1 [, ... event_15] + * No more than 15 events + */ + if (ZEND_NUM_ARGS() < 3 || ZEND_NUM_ARGS() > 17) { + WRONG_PARAM_COUNT; + } cb_arg = args[1]; i = 2; @@ -291,8 +297,10 @@ PHP_FUNCTION(ibase_set_event_handler) link_res_id = Z_LVAL_PP(args[0]); } else { - - if (ZEND_NUM_ARGS() > 16) { + /* callback, event_1 [, ... event_15] + * No more than 15 events + */ + if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > 16) { WRONG_PARAM_COUNT; } diff --git a/ext/interbase/tests/bug46247.phpt b/ext/interbase/tests/bug46247.phpt new file mode 100644 index 0000000000..ffd153b5f1 --- /dev/null +++ b/ext/interbase/tests/bug46247.phpt @@ -0,0 +1,36 @@ +--TEST-- +Bug #46247 (ibase_set_event_handler() is allowing to pass callback without event) +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php + +require("interbase.inc"); + +$db = ibase_connect($test_base); + +function test() { } + +ibase_set_event_handler(); + +ibase_set_event_handler('test', 1); +ibase_set_event_handler($db, 'test', 1); +ibase_set_event_handler(NULL, 'test', 1); + + +ibase_set_event_handler('foo', 1); +ibase_set_event_handler($db, 'foo', 1); +ibase_set_event_handler(NULL, 'foo', 1); + +?> +--EXPECTF-- + +Warning: Wrong parameter count for ibase_set_event_handler() in %s on line %d + +Warning: ibase_set_event_handler(): supplied argument is not a valid InterBase link resource in %s on line %d + +Warning: ibase_set_event_handler(): Callback argument foo is not a callable function in %s on line %d + +Warning: ibase_set_event_handler(): Callback argument foo is not a callable function in %s on line %d + +Warning: ibase_set_event_handler(): supplied argument is not a valid InterBase link resource in %s on line %d |