]> 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:31:48 +0000 (15:31 +0000)
committerFelipe Pena <felipe@php.net>
Tue, 7 Oct 2008 15:31:48 +0000 (15:31 +0000)
NEWS
ext/interbase/ibase_events.c
ext/interbase/tests/bug46247.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index d05761ae27512d2b920bfb6bdfc58637a0c7ca13..07b1bd60c95f676fd2eb23a25e70f549bf69cb1d 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -18,6 +18,8 @@ PHP                                                                        NEWS
   (Scott)
 - Fixed a crash on invalid method in ReflectionParameter constructor.
   (Christian Seiler)
+- Fixed bug #46247 (ibase_set_event_handler() is allowing to pass callback
+  without event). (Felipe)
 - Fixed bug #46215 (json_encode mutates its parameter and has some 
   class-specific state). (Felipe)
 - Fixed bug #46206 (pg_query_params/pg_execute convert passed values to
index f5d303c2db4d13f590872db839015604bb06c9e4..e4408142f8225f5e0909f4b6ed36afd1ef29f601 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