]> granicus.if.org Git - php/commitdiff
Safer way of allowing 'blank' user/pass.
authorIlia Alshanetsky <iliaa@php.net>
Sat, 9 Jul 2005 02:53:07 +0000 (02:53 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Sat, 9 Jul 2005 02:53:07 +0000 (02:53 +0000)
# Thanks Wez.

ext/pdo/pdo_dbh.c
ext/pdo/tests/pdo_test.inc

index 12d2a0739424ee0ec251b13950dbf777f5db29cd..336d620e704c9d89e50adb3c88af9ba867f21df0 100755 (executable)
@@ -220,7 +220,7 @@ static PHP_FUNCTION(dbh_constructor)
        char alt_dsn[512];
        int call_factory = 1;
 
-       if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ssa!", &data_source, &data_source_len,
+       if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!s!a!", &data_source, &data_source_len,
                                &username, &usernamelen, &password, &passwordlen, &options)) {
                ZVAL_NULL(object);
                return;
@@ -357,12 +357,12 @@ static PHP_FUNCTION(dbh_constructor)
        
        dbh->data_source_len = strlen(colon + 1);
        dbh->data_source = (const char*)pestrdup(colon + 1, is_persistent);
-       dbh->username = usernamelen ? pestrdup(username, is_persistent) : NULL;
-       dbh->password = passwordlen ? pestrdup(password, is_persistent) : NULL;
+       dbh->username = username ? pestrdup(username, is_persistent) : NULL;
+       dbh->password = password ? pestrdup(password, is_persistent) : NULL;
 
        dbh->auto_commit = pdo_attr_lval(options, PDO_ATTR_AUTOCOMMIT, 1 TSRMLS_CC);
 
-       if (!dbh->data_source || (usernamelen && !dbh->username) || (passwordlen && !dbh->password)) {
+       if (!dbh->data_source || (username && !dbh->username) || (password && !dbh->password)) {
                php_error_docref(NULL TSRMLS_CC, E_ERROR, "out of memory");
        }
 
index e941dc35cedaab269f525d466e6958dcd9da5f47..13ab1c1d5f0cf0979d3dc050b735d86ecf7fc94f 100644 (file)
@@ -14,6 +14,9 @@ class PDOTest {
                } else {
                        $attr = null;
                }
+
+               if ($user === false) $user = NULL;
+               if ($pass === false) $pass = NULL;
                
                $db = new $classname($dsn, $user, $pass, $attr);