]> granicus.if.org Git - php/commitdiff
Closes PECL Bug #5772; FETCH_FUNC broken for mixed case function names
authorWez Furlong <wez@php.net>
Sat, 29 Oct 2005 03:11:46 +0000 (03:11 +0000)
committerWez Furlong <wez@php.net>
Sat, 29 Oct 2005 03:11:46 +0000 (03:11 +0000)
ext/pdo/pdo_stmt.c
ext/pdo/tests/pecl_bug_5772.phpt [new file with mode: 0644]

index 64bc86c5ac799d3284f25f5b41db046854d114ea..f4f96f89d48792965a33e500e162e87f217b6562 100755 (executable)
@@ -682,7 +682,8 @@ static int make_callable_ex(pdo_stmt_t *stmt, zval *callable, zend_fcall_info *
                        ce = *pce;
                }
        }
-       
+
+       zend_str_tolower_copy(fname, fname, strlen(fname));
        fci->function_table = ce ? &ce->function_table : EG(function_table);
        if (zend_hash_find(fci->function_table, fname, strlen(fname)+1, (void **)&function_handler) == FAILURE) {
                pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "user-supplied function does not exist" TSRMLS_CC);
diff --git a/ext/pdo/tests/pecl_bug_5772.phpt b/ext/pdo/tests/pecl_bug_5772.phpt
new file mode 100644 (file)
index 0000000..d037609
--- /dev/null
@@ -0,0 +1,29 @@
+--TEST--
+PDO Common: PECL Bug #5772 PDO::FETCH_FUNC breaks on mixed case func name
+--SKIPIF--
+<?php # vim:ft=php:
+if (!extension_loaded('pdo')) die('skip');
+$dir = getenv('REDIR_TEST_DIR');
+if (false == $dir) die('skip no driver');
+require_once $dir . 'pdo_test.inc';
+PDOTest::skip();
+?>
+--FILE--
+<?php
+if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.dirname(__FILE__) . '/../../pdo/tests/');
+require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
+$db = PDOTest::factory();
+
+$db->exec("CREATE TABLE test (id int(10) NOT NULL, PRIMARY KEY (id))");
+$db->exec("INSERT INTO test (id) VALUES (1)");
+
+function heLLO($row) {
+       return $row;
+}
+
+foreach ($db->query("SELECT * FROM test")->fetchAll(PDO::FETCH_FUNC, 'heLLO') as $row) {
+       var_dump($row);
+}
+
+--EXPECT--
+string(1) "1"