mirror of
https://github.com/php/php-src.git
synced 2026-10-28 17:56:50 +08:00
Merge branch 'PHP-8.6'
* PHP-8.6: ext/pdo: Validate Oracle null handling modes
This commit is contained in:
2 files changed
+59
-3
No files matched your search
+10
-3
@@ -852,9 +852,16 @@ static bool pdo_dbh_attribute_set(pdo_dbh_t *dbh, zend_long attr, zval *value, u
|
||||
if (!pdo_get_long_param(&lval, value)) {
|
||||
return false;
|
||||
}
|
||||
/* TODO Check for valid value (NULL_NATURAL, NULL_EMPTY_STRING, NULL_TO_STRING)? */
|
||||
dbh->oracle_nulls = lval;
|
||||
return true;
|
||||
switch (lval) {
|
||||
case PDO_NULL_NATURAL:
|
||||
case PDO_NULL_EMPTY_STRING:
|
||||
case PDO_NULL_TO_STRING:
|
||||
dbh->oracle_nulls = lval;
|
||||
return true;
|
||||
default:
|
||||
zend_argument_value_error(value_arg_num, "PDO::ATTR_ORACLE_NULLS must be one of the PDO::NULL_* constants");
|
||||
return false;
|
||||
}
|
||||
|
||||
case PDO_ATTR_DEFAULT_FETCH_MODE:
|
||||
if (Z_TYPE_P(value) == IS_ARRAY) {
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
--TEST--
|
||||
PDO Common: Invalid Oracle null handling modes do not change the attribute
|
||||
--EXTENSIONS--
|
||||
pdo
|
||||
--SKIPIF--
|
||||
<?php
|
||||
$dir = getenv('REDIR_TEST_DIR');
|
||||
if ($dir === false) {
|
||||
die('skip no driver');
|
||||
}
|
||||
require_once $dir . 'pdo_test.inc';
|
||||
PDOTest::skip();
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
|
||||
$pdo = PDOTest::factory();
|
||||
|
||||
foreach ([PDO::NULL_NATURAL, PDO::NULL_EMPTY_STRING, PDO::NULL_TO_STRING] as $value) {
|
||||
echo "Valid mode: ";
|
||||
var_dump($pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, $value));
|
||||
var_dump($pdo->getAttribute(PDO::ATTR_ORACLE_NULLS));
|
||||
}
|
||||
|
||||
foreach ([-1, 3, 4, PHP_INT_MAX] as $value) {
|
||||
try {
|
||||
$pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, $value);
|
||||
} catch (ValueError $e) {
|
||||
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
|
||||
}
|
||||
echo "Unchanged mode: ";
|
||||
var_dump($pdo->getAttribute(PDO::ATTR_ORACLE_NULLS));
|
||||
}
|
||||
?>
|
||||
--EXPECT--
|
||||
Valid mode: bool(true)
|
||||
int(0)
|
||||
Valid mode: bool(true)
|
||||
int(1)
|
||||
Valid mode: bool(true)
|
||||
int(2)
|
||||
ValueError: PDO::setAttribute(): Argument #2 ($value) PDO::ATTR_ORACLE_NULLS must be one of the PDO::NULL_* constants
|
||||
Unchanged mode: int(2)
|
||||
ValueError: PDO::setAttribute(): Argument #2 ($value) PDO::ATTR_ORACLE_NULLS must be one of the PDO::NULL_* constants
|
||||
Unchanged mode: int(2)
|
||||
ValueError: PDO::setAttribute(): Argument #2 ($value) PDO::ATTR_ORACLE_NULLS must be one of the PDO::NULL_* constants
|
||||
Unchanged mode: int(2)
|
||||
ValueError: PDO::setAttribute(): Argument #2 ($value) PDO::ATTR_ORACLE_NULLS must be one of the PDO::NULL_* constants
|
||||
Unchanged mode: int(2)
|
||||
Reference in new issue
Block a user