Merge branch 'PHP-7.4'

* PHP-7.4:
  Fix MySQL local infile / attr handling on big endian systems
This commit is contained in:
Nikita Popov 2020-04-16 11:23:11 +02:00
commit a866ef88ed
4 changed files with 12 additions and 12 deletions

View file

@ -2332,7 +2332,7 @@ PHP_FUNCTION(mysqli_stmt_attr_set)
#if MYSQL_VERSION_ID >= 50107 #if MYSQL_VERSION_ID >= 50107
my_bool mode_b; my_bool mode_b;
#endif #endif
zend_ulong mode; unsigned long mode;
zend_long attr; zend_long attr;
void *mode_p; void *mode_p;
@ -2375,7 +2375,7 @@ PHP_FUNCTION(mysqli_stmt_attr_get)
{ {
MY_STMT *stmt; MY_STMT *stmt;
zval *mysql_stmt; zval *mysql_stmt;
zend_ulong value = 0; unsigned long value = 0;
zend_long attr; zend_long attr;
int rc; int rc;
@ -2392,7 +2392,7 @@ PHP_FUNCTION(mysqli_stmt_attr_get)
if (attr == STMT_ATTR_UPDATE_MAX_LENGTH) if (attr == STMT_ATTR_UPDATE_MAX_LENGTH)
value = *((my_bool *)&value); value = *((my_bool *)&value);
#endif #endif
RETURN_LONG((zend_ulong)value); RETURN_LONG((unsigned long)value);
} }
/* }}} */ /* }}} */

View file

@ -328,8 +328,8 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne
#if !defined(MYSQLI_USE_MYSQLND) #if !defined(MYSQLI_USE_MYSQLND)
mysql->mysql->reconnect = MyG(reconnect); mysql->mysql->reconnect = MyG(reconnect);
#endif #endif
unsigned int allow_local_infile = MyG(allow_local_infile);
mysql_options(mysql->mysql, MYSQL_OPT_LOCAL_INFILE, (char *)&MyG(allow_local_infile)); mysql_options(mysql->mysql, MYSQL_OPT_LOCAL_INFILE, (char *)&allow_local_infile);
end: end:
if (!mysqli_resource) { if (!mysqli_resource) {

View file

@ -1796,8 +1796,8 @@ MYSQLND_METHOD(mysqlnd_stmt, attr_set)(MYSQLND_STMT * const s,
break; break;
} }
case STMT_ATTR_CURSOR_TYPE: { case STMT_ATTR_CURSOR_TYPE: {
unsigned int ival = *(unsigned int *) value; unsigned long ival = *(unsigned long *) value;
if (ival > (zend_ulong) CURSOR_TYPE_READ_ONLY) { if (ival > (unsigned long) CURSOR_TYPE_READ_ONLY) {
SET_CLIENT_ERROR(stmt->error_info, CR_NOT_IMPLEMENTED, UNKNOWN_SQLSTATE, "Not implemented"); SET_CLIENT_ERROR(stmt->error_info, CR_NOT_IMPLEMENTED, UNKNOWN_SQLSTATE, "Not implemented");
DBG_INF("FAIL"); DBG_INF("FAIL");
DBG_RETURN(FAIL); DBG_RETURN(FAIL);
@ -1806,7 +1806,7 @@ MYSQLND_METHOD(mysqlnd_stmt, attr_set)(MYSQLND_STMT * const s,
break; break;
} }
case STMT_ATTR_PREFETCH_ROWS: { case STMT_ATTR_PREFETCH_ROWS: {
unsigned int ival = *(unsigned int *) value; unsigned long ival = *(unsigned long *) value;
if (ival == 0) { if (ival == 0) {
ival = MYSQLND_DEFAULT_PREFETCH_ROWS; ival = MYSQLND_DEFAULT_PREFETCH_ROWS;
} else if (ival > 1) { } else if (ival > 1) {
@ -1845,10 +1845,10 @@ MYSQLND_METHOD(mysqlnd_stmt, attr_get)(const MYSQLND_STMT * const s,
*(zend_bool *) value= stmt->update_max_length; *(zend_bool *) value= stmt->update_max_length;
break; break;
case STMT_ATTR_CURSOR_TYPE: case STMT_ATTR_CURSOR_TYPE:
*(zend_ulong *) value= stmt->flags; *(unsigned long *) value= stmt->flags;
break; break;
case STMT_ATTR_PREFETCH_ROWS: case STMT_ATTR_PREFETCH_ROWS:
*(zend_ulong *) value= stmt->prefetch_rows; *(unsigned long *) value= stmt->prefetch_rows;
break; break;
default: default:
DBG_RETURN(FAIL); DBG_RETURN(FAIL);

View file

@ -628,7 +628,7 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options)
/* handle MySQL options */ /* handle MySQL options */
if (driver_options) { if (driver_options) {
zend_long connect_timeout = pdo_attr_lval(driver_options, PDO_ATTR_TIMEOUT, 30); zend_long connect_timeout = pdo_attr_lval(driver_options, PDO_ATTR_TIMEOUT, 30);
zend_long local_infile = pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_LOCAL_INFILE, 0); unsigned int local_infile = (unsigned int) pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_LOCAL_INFILE, 0);
zend_string *init_cmd = NULL; zend_string *init_cmd = NULL;
#ifndef PDO_USE_MYSQLND #ifndef PDO_USE_MYSQLND
zend_string *default_file = NULL, *default_group = NULL; zend_string *default_file = NULL, *default_group = NULL;
@ -779,7 +779,7 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options)
} else { } else {
#if defined(MYSQL_OPT_LOCAL_INFILE) || defined(PDO_USE_MYSQLND) #if defined(MYSQL_OPT_LOCAL_INFILE) || defined(PDO_USE_MYSQLND)
// in case there are no driver options disable 'local infile' explicitly // in case there are no driver options disable 'local infile' explicitly
zend_long local_infile = 0; unsigned int local_infile = 0;
if (mysql_options(H->server, MYSQL_OPT_LOCAL_INFILE, (const char *)&local_infile)) { if (mysql_options(H->server, MYSQL_OPT_LOCAL_INFILE, (const char *)&local_infile)) {
pdo_mysql_error(dbh); pdo_mysql_error(dbh);
goto cleanup; goto cleanup;