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.
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) {