static bool dblib_set_attr(pdo_dbh_t *dbh, zend_long attr, zval *val)
{
pdo_dblib_db_handle *H = (pdo_dblib_db_handle *)dbh->driver_data;
+ zend_long lval;
switch(attr) {
case PDO_ATTR_DEFAULT_STR_PARAM:
- H->assume_national_character_set_strings = zval_get_long(val) == PDO_PARAM_STR_NATL ? 1 : 0;
+ if (!pdo_get_long_param(&lval, val)) {
+ return false;
+ }
+ H->assume_national_character_set_strings = lval == PDO_PARAM_STR_NATL ? 1 : 0;
return true;
case PDO_ATTR_TIMEOUT:
case PDO_DBLIB_ATTR_QUERY_TIMEOUT:
- return SUCCEED == dbsettime(zval_get_long(val));
+ if (!pdo_get_long_param(&lval, val)) {
+ return false;
+ }
+ return SUCCEED == dbsettime(lval);
case PDO_DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER:
- H->stringify_uniqueidentifier = zval_get_long(val);
+ if (!pdo_get_long_param(&lval, val)) {
+ return false;
+ }
+ H->stringify_uniqueidentifier = lval;
return true;
case PDO_DBLIB_ATTR_SKIP_EMPTY_ROWSETS:
H->skip_empty_rowsets = zval_is_true(val);
return true;
case PDO_DBLIB_ATTR_DATETIME_CONVERT:
- H->datetime_convert = zval_get_long(val);
+ if (!pdo_get_long_param(&lval, val)) {
+ return false;
+ }
+ H->datetime_convert = lval;
return true;
default:
return false;
switch (attr) {
case PDO_ATTR_AUTOCOMMIT:
{
+ /* Don't use pdo_get_long_param() API as zval_get_long accepts more things */
bool bval = zval_get_long(val)? 1 : 0;
/* ignore if the new value equals the old one */
/* {{{ pdo_mysql_set_attribute */
static bool pdo_mysql_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val)
{
- zend_long lval = zval_get_long(val);
- bool bval = lval ? 1 : 0;
+ zend_long lval;
+ /* Don't use pdo_get_long_param() API as zval_get_long accepts more things */
+ bool bval = zval_get_long(val) ? 1 : 0;
PDO_DBG_ENTER("pdo_mysql_set_attribute");
PDO_DBG_INF_FMT("dbh=%p", dbh);
PDO_DBG_INF_FMT("attr=%l", attr);
+
switch (attr) {
case PDO_ATTR_AUTOCOMMIT:
/* ignore if the new value equals the old one */
PDO_DBG_RETURN(true);
case PDO_ATTR_DEFAULT_STR_PARAM:
+ if (!pdo_get_long_param(&lval, val)) {
+ PDO_DBG_RETURN(false);
+ }
((pdo_mysql_db_handle *)dbh->driver_data)->assume_national_character_set_strings = lval == PDO_PARAM_STR_NATL;
PDO_DBG_RETURN(true);
#ifndef PDO_USE_MYSQLND
case PDO_MYSQL_ATTR_MAX_BUFFER_SIZE:
+ if (!pdo_get_long_param(&lval, val)) {
+ PDO_DBG_RETURN(false);
+ }
if (lval < 0) {
/* TODO: Johannes, can we throw a warning here? */
((pdo_mysql_db_handle *)dbh->driver_data)->max_buffer_size = 1024*1024;
static bool oci_handle_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val) /* {{{ */
{
- zend_long lval = zval_get_long(val);
+ zend_long lval;
pdo_oci_db_handle *H = (pdo_oci_db_handle *)dbh->driver_data;
switch (attr) {
case PDO_ATTR_AUTOCOMMIT:
{
+ if (pdo_get_long_param(&lval, val) == false) {
+ return false;
+ }
+
if (dbh->in_txn) {
/* Assume they want to commit whatever is outstanding */
H->last_err = OCITransCommit(H->svc, H->err, 0);
}
case PDO_ATTR_PREFETCH:
{
+ if (!pdo_get_long_param(&lval, val)) {
+ return false;
+ }
+
H->prefetch = pdo_oci_sanitize_prefetch(lval);
return true;
}
case PDO_OCI_ATTR_CALL_TIMEOUT:
{
#if (OCI_MAJOR_VERSION >= 18)
+ if (!pdo_get_long_param(&lval, val)) {
+ return false;
+ }
ub4 timeout = (ub4) lval;
H->last_err = OCIAttrSet(H->svc, OCI_HTYPE_SVCCTX,
static bool pdo_sqlite_set_attr(pdo_dbh_t *dbh, zend_long attr, zval *val)
{
pdo_sqlite_db_handle *H = (pdo_sqlite_db_handle *)dbh->driver_data;
+ zend_long lval;
switch (attr) {
case PDO_ATTR_TIMEOUT:
- sqlite3_busy_timeout(H->db, zval_get_long(val) * 1000);
+ if (!pdo_get_long_param(&lval, val)) {
+ return false;
+ }
+ sqlite3_busy_timeout(H->db, lval * 1000);
return true;
case PDO_SQLITE_ATTR_EXTENDED_RESULT_CODES:
- sqlite3_extended_result_codes(H->db, zval_get_long(val));
+ if (!pdo_get_long_param(&lval, val)) {
+ return false;
+ }
+ sqlite3_extended_result_codes(H->db, lval);
return true;
}
return false;
$pdo = new PDO("sqlite:".__DIR__."/foo.db");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
-var_dump($pdo->setAttribute(PDO::NULL_TO_STRING, NULL));
+try {
+ var_dump($pdo->setAttribute(PDO::NULL_TO_STRING, NULL));
+} catch (\TypeError $e) {
+ echo $e->getMessage(), \PHP_EOL;
+}
var_dump($pdo->setAttribute(PDO::NULL_TO_STRING, 1));
-var_dump($pdo->setAttribute(PDO::NULL_TO_STRING, 'nonsense'));
+try {
+ var_dump($pdo->setAttribute(PDO::NULL_TO_STRING, 'nonsense'));
+} catch (\TypeError $e) {
+ echo $e->getMessage(), \PHP_EOL;
+}
@unlink(__DIR__."/foo.db");
?>
--EXPECT--
+Attribute value must be of type int for selected attribute, null given
bool(true)
-bool(true)
-bool(true)
+Attribute value must be of type int for selected attribute, string given