From ac656e49cc0f53ba5f2af32d98af5fc3f778d207 Mon Sep 17 00:00:00 2001 From: guirish Date: Fri, 10 Apr 2020 05:45:40 -0400 Subject: [PATCH 1/3] mysql related test cases are failing on big endian systems, updated type casting during pointer deferencing --- ext/mysqlnd/mysqlnd_connection.c | 2 +- ext/mysqlnd/mysqlnd_ps.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/mysqlnd/mysqlnd_connection.c b/ext/mysqlnd/mysqlnd_connection.c index c1b2926711a8..4952e9b58904 100644 --- a/ext/mysqlnd/mysqlnd_connection.c +++ b/ext/mysqlnd/mysqlnd_connection.c @@ -1660,7 +1660,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, set_client_option)(MYSQLND_CONN_DATA * const c break; #endif case MYSQL_OPT_LOCAL_INFILE: - if (value && (*(unsigned int*) value) ? 1 : 0) { + if (value && (*(zend_long *) value) ? 1 : 0) { conn->options->flags |= CLIENT_LOCAL_FILES; } else { conn->options->flags &= ~CLIENT_LOCAL_FILES; diff --git a/ext/mysqlnd/mysqlnd_ps.c b/ext/mysqlnd/mysqlnd_ps.c index 01096d10d5a9..9d56f6e03298 100644 --- a/ext/mysqlnd/mysqlnd_ps.c +++ b/ext/mysqlnd/mysqlnd_ps.c @@ -1796,7 +1796,7 @@ MYSQLND_METHOD(mysqlnd_stmt, attr_set)(MYSQLND_STMT * const s, break; } case STMT_ATTR_CURSOR_TYPE: { - unsigned int ival = *(unsigned int *) value; + zend_ulong ival = *(zend_ulong *) value; if (ival > (zend_ulong) CURSOR_TYPE_READ_ONLY) { SET_CLIENT_ERROR(stmt->error_info, CR_NOT_IMPLEMENTED, UNKNOWN_SQLSTATE, "Not implemented"); DBG_INF("FAIL"); From 9aae7debcecd77c8f27e0b6bdf0cb4b503171ba7 Mon Sep 17 00:00:00 2001 From: guirish Date: Tue, 14 Apr 2020 07:28:55 -0700 Subject: [PATCH 2/3] updated local_infile and allow_local_infile variable to type unsigned int as per review comments from @nikic --- ext/mysqli/mysqli_nonapi.c | 4 ++-- ext/mysqlnd/mysqlnd_connection.c | 2 +- ext/pdo_mysql/mysql_driver.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index 4ba77579da39..34b74be32161 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -328,8 +328,8 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne #if !defined(MYSQLI_USE_MYSQLND) mysql->mysql->reconnect = MyG(reconnect); #endif - - mysql_options(mysql->mysql, MYSQL_OPT_LOCAL_INFILE, (char *)&MyG(allow_local_infile)); + unsigned int allow_local_infile = MyG(allow_local_infile); + mysql_options(mysql->mysql, MYSQL_OPT_LOCAL_INFILE, (char *)&allow_local_infile); end: if (!mysqli_resource) { diff --git a/ext/mysqlnd/mysqlnd_connection.c b/ext/mysqlnd/mysqlnd_connection.c index 4952e9b58904..c1b2926711a8 100644 --- a/ext/mysqlnd/mysqlnd_connection.c +++ b/ext/mysqlnd/mysqlnd_connection.c @@ -1660,7 +1660,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, set_client_option)(MYSQLND_CONN_DATA * const c break; #endif case MYSQL_OPT_LOCAL_INFILE: - if (value && (*(zend_long *) value) ? 1 : 0) { + if (value && (*(unsigned int*) value) ? 1 : 0) { conn->options->flags |= CLIENT_LOCAL_FILES; } else { conn->options->flags &= ~CLIENT_LOCAL_FILES; diff --git a/ext/pdo_mysql/mysql_driver.c b/ext/pdo_mysql/mysql_driver.c index 0b5ef64b22de..26b4eee82b86 100644 --- a/ext/pdo_mysql/mysql_driver.c +++ b/ext/pdo_mysql/mysql_driver.c @@ -628,7 +628,7 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* handle MySQL options */ if (driver_options) { 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; #ifndef PDO_USE_MYSQLND 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 { #if defined(MYSQL_OPT_LOCAL_INFILE) || defined(PDO_USE_MYSQLND) // 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)) { pdo_mysql_error(dbh); goto cleanup; From fb6c8ba99d0eb4adafd97e22a938bd3dc710277d Mon Sep 17 00:00:00 2001 From: guirish Date: Wed, 15 Apr 2020 06:34:22 -0700 Subject: [PATCH 3/3] As per review comments from @nikic updated libmysql specified STMT_ATTR_CURSOR_TYPE of type unsigned long * --- ext/mysqli/mysqli_api.c | 6 +++--- ext/mysqlnd/mysqlnd_ps.c | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index 80c8ca76fa1f..47822bd5f17a 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -2332,7 +2332,7 @@ PHP_FUNCTION(mysqli_stmt_attr_set) #if MYSQL_VERSION_ID >= 50107 my_bool mode_b; #endif - zend_ulong mode; + unsigned long mode; zend_long attr; void *mode_p; @@ -2375,7 +2375,7 @@ PHP_FUNCTION(mysqli_stmt_attr_get) { MY_STMT *stmt; zval *mysql_stmt; - zend_ulong value = 0; + unsigned long value = 0; zend_long attr; int rc; @@ -2392,7 +2392,7 @@ PHP_FUNCTION(mysqli_stmt_attr_get) if (attr == STMT_ATTR_UPDATE_MAX_LENGTH) value = *((my_bool *)&value); #endif - RETURN_LONG((zend_ulong)value); + RETURN_LONG((unsigned long)value); } /* }}} */ diff --git a/ext/mysqlnd/mysqlnd_ps.c b/ext/mysqlnd/mysqlnd_ps.c index 9d56f6e03298..01ee53e0a85b 100644 --- a/ext/mysqlnd/mysqlnd_ps.c +++ b/ext/mysqlnd/mysqlnd_ps.c @@ -1796,8 +1796,8 @@ MYSQLND_METHOD(mysqlnd_stmt, attr_set)(MYSQLND_STMT * const s, break; } case STMT_ATTR_CURSOR_TYPE: { - zend_ulong ival = *(zend_ulong *) value; - if (ival > (zend_ulong) CURSOR_TYPE_READ_ONLY) { + unsigned long ival = *(unsigned long *) value; + if (ival > (unsigned long) CURSOR_TYPE_READ_ONLY) { SET_CLIENT_ERROR(stmt->error_info, CR_NOT_IMPLEMENTED, UNKNOWN_SQLSTATE, "Not implemented"); DBG_INF("FAIL"); DBG_RETURN(FAIL); @@ -1806,7 +1806,7 @@ MYSQLND_METHOD(mysqlnd_stmt, attr_set)(MYSQLND_STMT * const s, break; } case STMT_ATTR_PREFETCH_ROWS: { - unsigned int ival = *(unsigned int *) value; + unsigned long ival = *(unsigned long *) value; if (ival == 0) { ival = MYSQLND_DEFAULT_PREFETCH_ROWS; } 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; break; case STMT_ATTR_CURSOR_TYPE: - *(zend_ulong *) value= stmt->flags; + *(unsigned long *) value= stmt->flags; break; case STMT_ATTR_PREFETCH_ROWS: - *(zend_ulong *) value= stmt->prefetch_rows; + *(unsigned long *) value= stmt->prefetch_rows; break; default: DBG_RETURN(FAIL);