Created
April 15, 2021 02:06
-
-
Save adsr/629c24d8fcce3f24c638363afabfcdeb to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| diff --git a/ext/pdo_mysql/mysql_driver.c b/ext/pdo_mysql/mysql_driver.c | |
| index b7b6770327..fd3f5318f7 100644 | |
| --- a/ext/pdo_mysql/mysql_driver.c | |
| +++ b/ext/pdo_mysql/mysql_driver.c | |
| @@ -410,20 +410,38 @@ static int pdo_mysql_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val) | |
| case PDO_MYSQL_ATTR_MAX_BUFFER_SIZE: | |
| if (lval < 0) { | |
| /* TODO: Johannes, can we throw a warning here? */ | |
| ((pdo_mysql_db_handle *)dbh->driver_data)->max_buffer_size = 1024*1024; | |
| PDO_DBG_INF_FMT("Adjusting invalid buffer size to =%l", ((pdo_mysql_db_handle *)dbh->driver_data)->max_buffer_size); | |
| } else { | |
| ((pdo_mysql_db_handle *)dbh->driver_data)->max_buffer_size = lval; | |
| } | |
| PDO_DBG_RETURN(1); | |
| break; | |
| +#else | |
| + case PDO_MYSQL_ATTR_READ_TIMEOUT: | |
| + { | |
| + MYSQLND_VIO *vio = ((pdo_mysql_db_handle *)dbh->driver_data)->server->data->vio; | |
| + unsigned int lval_uint = lval; | |
| + | |
| + vio->data->m.set_client_option(vio, MYSQL_OPT_READ_TIMEOUT, (char *)&lval_uint); | |
| + | |
| + php_stream *net_stream = vio->data->m.get_stream(vio); | |
| + if (net_stream) { | |
| + struct timeval tv; | |
| + tv.tv_sec = vio->data->options.timeout_read; | |
| + tv.tv_usec = 0; | |
| + php_stream_set_option(net_stream, PHP_STREAM_OPTION_READ_TIMEOUT, 0, &tv); | |
| + } | |
| + PDO_DBG_RETURN(1); | |
| + } | |
| + | |
| #endif | |
| default: | |
| PDO_DBG_RETURN(0); | |
| } | |
| } | |
| /* }}} */ | |
| /* {{{ pdo_mysql_get_attribute */ | |
| static int pdo_mysql_get_attribute(pdo_dbh_t *dbh, zend_long attr, zval *return_value) | |
| @@ -478,20 +496,24 @@ static int pdo_mysql_get_attribute(pdo_dbh_t *dbh, zend_long attr, zval *return_ | |
| case PDO_ATTR_EMULATE_PREPARES: | |
| case PDO_MYSQL_ATTR_DIRECT_QUERY: | |
| ZVAL_LONG(return_value, H->emulate_prepare); | |
| break; | |
| #ifndef PDO_USE_MYSQLND | |
| case PDO_MYSQL_ATTR_MAX_BUFFER_SIZE: | |
| ZVAL_LONG(return_value, H->max_buffer_size); | |
| break; | |
| #else | |
| + case PDO_MYSQL_ATTR_READ_TIMEOUT: | |
| + ZVAL_LONG(return_value, H->server->data->vio->data->options.timeout_read); | |
| + PDO_DBG_RETURN(1); | |
| + | |
| case PDO_MYSQL_ATTR_LOCAL_INFILE: | |
| ZVAL_BOOL( | |
| return_value, | |
| (H->server->data->options->flags & CLIENT_LOCAL_FILES) == CLIENT_LOCAL_FILES); | |
| break; | |
| #endif | |
| default: | |
| PDO_DBG_RETURN(0); | |
| } | |
| diff --git a/ext/pdo_mysql/pdo_mysql.c b/ext/pdo_mysql/pdo_mysql.c | |
| index 60813a62dc..58b0505200 100644 | |
| --- a/ext/pdo_mysql/pdo_mysql.c | |
| +++ b/ext/pdo_mysql/pdo_mysql.c | |
| @@ -123,20 +123,21 @@ static PHP_MINIT_FUNCTION(pdo_mysql) | |
| REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CERT", (zend_long)PDO_MYSQL_ATTR_SSL_CERT); | |
| REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CA", (zend_long)PDO_MYSQL_ATTR_SSL_CA); | |
| REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CAPATH", (zend_long)PDO_MYSQL_ATTR_SSL_CAPATH); | |
| REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CIPHER", (zend_long)PDO_MYSQL_ATTR_SSL_CIPHER); | |
| #if MYSQL_VERSION_ID > 50605 || defined(PDO_USE_MYSQLND) | |
| REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SERVER_PUBLIC_KEY", (zend_long)PDO_MYSQL_ATTR_SERVER_PUBLIC_KEY); | |
| #endif | |
| REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_MULTI_STATEMENTS", (zend_long)PDO_MYSQL_ATTR_MULTI_STATEMENTS); | |
| #ifdef PDO_USE_MYSQLND | |
| REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_VERIFY_SERVER_CERT", (zend_long)PDO_MYSQL_ATTR_SSL_VERIFY_SERVER_CERT); | |
| + REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_READ_TIMEOUT", (zend_long)PDO_MYSQL_ATTR_READ_TIMEOUT); | |
| #endif | |
| #ifdef PDO_USE_MYSQLND | |
| mysqlnd_reverse_api_register_api(&pdo_mysql_reverse_api); | |
| #endif | |
| return php_pdo_register_driver(&pdo_mysql_driver); | |
| } | |
| /* }}} */ | |
| diff --git a/ext/pdo_mysql/php_pdo_mysql_int.h b/ext/pdo_mysql/php_pdo_mysql_int.h | |
| index 486780acdc..33ee90eead 100644 | |
| --- a/ext/pdo_mysql/php_pdo_mysql_int.h | |
| +++ b/ext/pdo_mysql/php_pdo_mysql_int.h | |
| @@ -172,14 +172,15 @@ enum { | |
| PDO_MYSQL_ATTR_SSL_CERT, | |
| PDO_MYSQL_ATTR_SSL_CA, | |
| PDO_MYSQL_ATTR_SSL_CAPATH, | |
| PDO_MYSQL_ATTR_SSL_CIPHER, | |
| #if MYSQL_VERSION_ID > 50605 || defined(PDO_USE_MYSQLND) | |
| PDO_MYSQL_ATTR_SERVER_PUBLIC_KEY, | |
| #endif | |
| PDO_MYSQL_ATTR_MULTI_STATEMENTS, | |
| #ifdef PDO_USE_MYSQLND | |
| PDO_MYSQL_ATTR_SSL_VERIFY_SERVER_CERT, | |
| + PDO_MYSQL_ATTR_READ_TIMEOUT, | |
| #endif | |
| }; | |
| #endif |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment