mirror of
https://github.com/php/php-src.git
synced 2024-09-29 13:56:09 +00:00
Fix for bug #49965 . Let mysqli_options() try to cast option values to the appropriate type.
This commit is contained in:
parent
2fad7df98c
commit
7b22d7222b
@ -1642,6 +1642,65 @@ PHP_FUNCTION(mysqli_num_rows)
|
|||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
/* {{{ mysqli_options_get_option_zval_type */
|
||||||
|
static int mysqli_options_get_option_zval_type(int option)
|
||||||
|
{
|
||||||
|
switch (option) {
|
||||||
|
#ifdef MYSQLI_USE_MYSQLND
|
||||||
|
#if PHP_MAJOR_VERSION >= 6
|
||||||
|
case MYSQLND_OPT_NUMERIC_AND_DATETIME_AS_UNICODE:
|
||||||
|
#endif
|
||||||
|
case MYSQLND_OPT_NET_CMD_BUFFER_SIZE:
|
||||||
|
case MYSQLND_OPT_NET_READ_BUFFER_SIZE:
|
||||||
|
#ifdef MYSQLND_STRING_TO_INT_CONVERSION
|
||||||
|
case MYSQLND_OPT_INT_AND_FLOAT_NATIVE:
|
||||||
|
#endif
|
||||||
|
#endif /* MYSQLI_USE_MYSQLND */
|
||||||
|
case MYSQL_OPT_CONNECT_TIMEOUT:
|
||||||
|
case MYSQL_REPORT_DATA_TRUNCATION:
|
||||||
|
case MYSQL_OPT_LOCAL_INFILE:
|
||||||
|
case MYSQL_OPT_NAMED_PIPE:
|
||||||
|
#ifdef MYSQL_OPT_PROTOCOL
|
||||||
|
case MYSQL_OPT_PROTOCOL:
|
||||||
|
#endif /* MySQL 4.1.0 */
|
||||||
|
#ifdef MYSQL_OPT_READ_TIMEOUT
|
||||||
|
case MYSQL_OPT_READ_TIMEOUT:
|
||||||
|
case MYSQL_OPT_WRITE_TIMEOUT:
|
||||||
|
case MYSQL_OPT_GUESS_CONNECTION:
|
||||||
|
case MYSQL_OPT_USE_EMBEDDED_CONNECTION:
|
||||||
|
case MYSQL_OPT_USE_REMOTE_CONNECTION:
|
||||||
|
case MYSQL_SECURE_AUTH:
|
||||||
|
#endif /* MySQL 4.1.1 */
|
||||||
|
#ifdef MYSQL_OPT_RECONNECT
|
||||||
|
case MYSQL_OPT_RECONNECT:
|
||||||
|
#endif /* MySQL 5.0.13 */
|
||||||
|
#ifdef MYSQL_OPT_SSL_VERIFY_SERVER_CERT
|
||||||
|
case MYSQL_OPT_SSL_VERIFY_SERVER_CERT:
|
||||||
|
#endif /* MySQL 5.0.23 */
|
||||||
|
#ifdef MYSQL_OPT_COMPRESS
|
||||||
|
case MYSQL_OPT_COMPRESS:
|
||||||
|
#endif /* mysqlnd @ PHP 5.3.2 */
|
||||||
|
return IS_LONG;
|
||||||
|
|
||||||
|
#ifdef MYSQL_SHARED_MEMORY_BASE_NAME
|
||||||
|
case MYSQL_SHARED_MEMORY_BASE_NAME:
|
||||||
|
#endif /* MySQL 4.1.0 */
|
||||||
|
#ifdef MYSQL_SET_CLIENT_IP
|
||||||
|
case MYSQL_SET_CLIENT_IP:
|
||||||
|
#endif /* MySQL 4.1.1 */
|
||||||
|
case MYSQL_READ_DEFAULT_FILE:
|
||||||
|
case MYSQL_READ_DEFAULT_GROUP:
|
||||||
|
case MYSQL_INIT_COMMAND:
|
||||||
|
case MYSQL_SET_CHARSET_NAME:
|
||||||
|
case MYSQL_SET_CHARSET_DIR:
|
||||||
|
return IS_STRING;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return IS_NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* }}} */
|
||||||
|
|
||||||
/* {{{ proto bool mysqli_options(object link, int flags, mixed values) U
|
/* {{{ proto bool mysqli_options(object link, int flags, mixed values) U
|
||||||
Set options */
|
Set options */
|
||||||
PHP_FUNCTION(mysqli_options)
|
PHP_FUNCTION(mysqli_options)
|
||||||
@ -1652,6 +1711,7 @@ PHP_FUNCTION(mysqli_options)
|
|||||||
long mysql_option;
|
long mysql_option;
|
||||||
unsigned int l_value;
|
unsigned int l_value;
|
||||||
long ret;
|
long ret;
|
||||||
|
int expected_type;
|
||||||
|
|
||||||
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Olz", &mysql_link, mysqli_link_class_entry, &mysql_option, &mysql_value) == FAILURE) {
|
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Olz", &mysql_link, mysqli_link_class_entry, &mysql_option, &mysql_value) == FAILURE) {
|
||||||
return;
|
return;
|
||||||
@ -1664,17 +1724,31 @@ PHP_FUNCTION(mysqli_options)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (Z_TYPE_PP(&mysql_value)) {
|
expected_type = mysqli_options_get_option_zval_type(mysql_option);
|
||||||
case IS_UNICODE:
|
if (expected_type != Z_TYPE_P(mysql_value)) {
|
||||||
zval_unicode_to_string(mysql_value TSRMLS_CC);
|
switch (expected_type) {
|
||||||
|
case IS_STRING:
|
||||||
|
convert_to_string_ex(&mysql_value);
|
||||||
|
break;
|
||||||
|
case IS_LONG:
|
||||||
|
convert_to_long_ex(&mysql_value);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (expected_type) {
|
||||||
case IS_STRING:
|
case IS_STRING:
|
||||||
ret = mysql_options(mysql->mysql, mysql_option, Z_STRVAL_PP(&mysql_value));
|
ret = mysql_options(mysql->mysql, mysql_option, Z_STRVAL_PP(&mysql_value));
|
||||||
break;
|
break;
|
||||||
default:
|
case IS_LONG:
|
||||||
convert_to_long_ex(&mysql_value);
|
|
||||||
l_value = Z_LVAL_PP(&mysql_value);
|
l_value = Z_LVAL_PP(&mysql_value);
|
||||||
ret = mysql_options(mysql->mysql, mysql_option, (char *)&l_value);
|
ret = mysql_options(mysql->mysql, mysql_option, (char *)&l_value);
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
ret = 1;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
RETURN_BOOL(!ret);
|
RETURN_BOOL(!ret);
|
||||||
|
@ -111,6 +111,8 @@ bool(true)
|
|||||||
bool(true)
|
bool(true)
|
||||||
%s(23) "MYSQLI_OPT_LOCAL_INFILE"
|
%s(23) "MYSQLI_OPT_LOCAL_INFILE"
|
||||||
bool(true)
|
bool(true)
|
||||||
|
|
||||||
|
Notice: Array to string conversion in %s on line %d
|
||||||
%s(19) "MYSQLI_INIT_COMMAND"
|
%s(19) "MYSQLI_INIT_COMMAND"
|
||||||
bool(true)
|
bool(true)
|
||||||
%s(25) "MYSQLI_READ_DEFAULT_GROUP"
|
%s(25) "MYSQLI_READ_DEFAULT_GROUP"
|
||||||
|
Loading…
Reference in New Issue
Block a user