]> granicus.if.org Git - php/commitdiff
- MFH: Fixed bug #46247 (ibase_set_event_handler() is allowing to pass callback witho...
authorFelipe Pena <felipe@php.net>
Tue, 7 Oct 2008 15:28:45 +0000 (15:28 +0000)
committerFelipe Pena <felipe@php.net>
Tue, 7 Oct 2008 15:28:45 +0000 (15:28 +0000)
ext/interbase/ibase_events.c
ext/interbase/tests/bug46247.phpt [new file with mode: 0644]

index b4c204ba26c20d1d689c4d94c243b83455c9ce67..b0f5763d927c3ed0bb46ab6226529e7ea24cb8b8 100644 (file)
@@ -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 (file)
index 0000000..ffd153b
--- /dev/null
@@ -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