~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to libdrizzle/handshake.c

  • Committer: Lee Bieber
  • Date: 2010-11-24 04:28:41 UTC
  • mfrom: (1939.2.2 bug677522)
  • Revision ID: kalebral@gmail.com-20101124042841-57f0tw3zwmcl0kzy
 Merge Monty - 677522: libdrizzle: crashes when used with MySQL 5.5.7

Show diffs side-by-side

added added

removed removed

Lines of Context:
74
74
drizzle_return_t drizzle_state_handshake_server_read(drizzle_con_st *con)
75
75
{
76
76
  uint8_t *ptr;
 
77
  int extra_length;
 
78
  unsigned char* packet_end;
77
79
 
78
80
  drizzle_log_debug(con->drizzle, "drizzle_state_handshake_server_read");
79
81
 
91
93
    return DRIZZLE_RETURN_BAD_HANDSHAKE_PACKET;
92
94
  }
93
95
 
 
96
  packet_end= con->buffer_ptr + con->packet_size;
94
97
  con->protocol_version= con->buffer_ptr[0];
95
98
  con->buffer_ptr++;
96
99
 
121
124
    return DRIZZLE_RETURN_BAD_HANDSHAKE_PACKET;
122
125
  }
123
126
 
124
 
  if (con->packet_size != (46 + (size_t)(ptr - con->buffer_ptr)))
 
127
  if (con->packet_size < (46 + (size_t)(ptr - con->buffer_ptr)))
125
128
  {
126
129
    drizzle_set_error(con->drizzle, "drizzle_state_handshake_server_read",
127
130
                      "bad packet size:%zu:%zu",
166
169
  memcpy(con->scramble + 8, con->buffer_ptr, 12);
167
170
  con->buffer_ptr+= 13;
168
171
 
 
172
  /* MySQL 5.5 adds "mysql_native_password" after the server greeting. */
 
173
  extra_length= packet_end - con->buffer_ptr;
 
174
  assert(extra_length >= 0);
 
175
  if (extra_length > DRIZZLE_MAX_SERVER_EXTRA_SIZE - 1)
 
176
    extra_length= DRIZZLE_MAX_SERVER_EXTRA_SIZE - 1;
 
177
  memcpy(con->server_extra, (char *)con->buffer_ptr, extra_length);
 
178
  con->server_extra[extra_length]= 0;
 
179
 
169
180
  con->buffer_size-= con->packet_size;
170
181
  if (con->buffer_size != 0)
171
182
  {