iliaa Thu Feb 21 13:37:21 2008 UTC
Modified files: (Branch: PHP_5_3)
/php-src/ext/pdo pdo_dbh.c
Log:
Fixed bug #44189 (PDO setAttribute() does not properly validate values for
native numeric options)
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_dbh.c?r1=1.82.2.31.2.17.2.5&r2=1.82.2.31.2.17.2.6&diff_format=u
Index: php-src/ext/pdo/pdo_dbh.c
diff -u php-src/ext/pdo/pdo_dbh.c:1.82.2.31.2.17.2.5
php-src/ext/pdo/pdo_dbh.c:1.82.2.31.2.17.2.6
--- php-src/ext/pdo/pdo_dbh.c:1.82.2.31.2.17.2.5 Tue Feb 19 12:13:20 2008
+++ php-src/ext/pdo/pdo_dbh.c Thu Feb 21 13:37:21 2008
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pdo_dbh.c,v 1.82.2.31.2.17.2.5 2008/02/19 12:13:20 felipe Exp $ */
+/* $Id: pdo_dbh.c,v 1.82.2.31.2.17.2.6 2008/02/21 13:37:21 iliaa Exp $ */
/* The PDO Database Handle Class */
@@ -669,8 +669,17 @@
static int pdo_dbh_attribute_set(pdo_dbh_t *dbh, long attr, zval *value
TSRMLS_DC) /* {{{ */
{
+
+#define PDO_LONG_PARAM_CHECK \
+ if (Z_TYPE_P(value) != IS_LONG && Z_TYPE_P(value) != IS_STRING &&
Z_TYPE_P(value) != IS_BOOL) { \
+ pdo_raise_impl_error(dbh, NULL, "HY000", "attribute value must
be an integer" TSRMLS_CC); \
+ PDO_HANDLE_DBH_ERR(); \
+ return FAILURE; \
+ } \
+
switch (attr) {
case PDO_ATTR_ERRMODE:
+ PDO_LONG_PARAM_CHECK;
convert_to_long(value);
switch (Z_LVAL_P(value)) {
case PDO_ERRMODE_SILENT:
@@ -686,6 +695,7 @@
return FAILURE;
case PDO_ATTR_CASE:
+ PDO_LONG_PARAM_CHECK;
convert_to_long(value);
switch (Z_LVAL_P(value)) {
case PDO_CASE_NATURAL:
@@ -701,6 +711,7 @@
return FAILURE;
case PDO_ATTR_ORACLE_NULLS:
+ PDO_LONG_PARAM_CHECK;
convert_to_long(value);
dbh->oracle_nulls = Z_LVAL_P(value);
return SUCCESS;
@@ -714,6 +725,8 @@
return FAILURE;
}
}
+ } else {
+ PDO_LONG_PARAM_CHECK;
}
convert_to_long(value);
if (Z_LVAL_P(value) == PDO_FETCH_USE_DEFAULT) {
@@ -724,6 +737,7 @@
return SUCCESS;
case PDO_ATTR_STRINGIFY_FETCHES:
+ PDO_LONG_PARAM_CHECK;
convert_to_long(value);
dbh->stringify = Z_LVAL_P(value) ? 1 : 0;
return SUCCESS;
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php