]> granicus.if.org Git - php/commitdiff
Fix MySQL local infile / attr handling on big endian systems
authorguirish <root@eocs0030.pok.stglabs.ibm.com>
Fri, 10 Apr 2020 09:45:40 +0000 (05:45 -0400)
committerNikita Popov <nikita.ppv@gmail.com>
Thu, 16 Apr 2020 09:22:17 +0000 (11:22 +0200)
Make sure pointer types match what is used by libmysql everywhere.

Closes GH-5380.

ext/mysqli/mysqli_api.c
ext/mysqli/mysqli_nonapi.c
ext/mysqlnd/mysqlnd_ps.c
ext/pdo_mysql/mysql_driver.c

index c4ed1bf54326bafd067e9fb44818e9e02ce59afe..8632971893a799d38454e8dd1460329965f35331 100644 (file)
@@ -2327,7 +2327,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;
 
@@ -2370,7 +2370,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;
 
@@ -2387,7 +2387,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);
 }
 /* }}} */
 
index 0f5714bf214ac42fdeba5701a2a2ba326fa728a1..4736e4fcb2a4573bf71056bd760ff22b930d67d2 100644 (file)
@@ -305,8 +305,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) {
index b2017b9127f59f80e9408fc4454104985ee69ca4..d93a5ed7b1267c9e38d6510fb26bfdb6807d6713 100644 (file)
@@ -1899,8 +1899,8 @@ MYSQLND_METHOD(mysqlnd_stmt, attr_set)(MYSQLND_STMT * const s,
                        break;
                }
                case STMT_ATTR_CURSOR_TYPE: {
-                       unsigned int ival = *(unsigned int *) 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);
@@ -1909,7 +1909,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) {
@@ -1948,10 +1948,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);
index b7b6770327fb169c3808f99890279e9542ea67a4..6431ccf4e14ba5782fd1bf575b2045875e553aa0 100644 (file)
@@ -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;