]> granicus.if.org Git - php/commitdiff
Fix incorrect shift in mysqlnd_wireprotocol
authorNikita Popov <nikita.ppv@gmail.com>
Wed, 19 Jun 2019 12:22:05 +0000 (14:22 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Wed, 19 Jun 2019 13:09:00 +0000 (15:09 +0200)
This one looks like a genuine bug: We're shifting a uint16_t by
16 bits. On x86 that likely results in no shift happening.

ext/mysqlnd/mysqlnd_wireprotocol.c

index 6ef48a4a7d1d892033188d87acdbfcfaaf197057..609fd9830938222864dc9032ef1ba2786e8cd153 100644 (file)
@@ -420,7 +420,7 @@ php_mysqlnd_greet_read(MYSQLND_CONN_DATA * conn, void * _packet)
                p--;
 
        /* Additional 16 bits for server capabilities */
-               packet->server_capabilities |= uint2korr(pad_start) << 16;
+               packet->server_capabilities |= (uint32_t) uint2korr(pad_start) << 16;
                /* And a length of the server scramble in one byte */
                packet->authentication_plugin_data.l = uint1korr(pad_start + 2);
                if (packet->authentication_plugin_data.l > SCRAMBLE_LENGTH) {