1
0
mirror of https://github.com/mariadb-corporation/mariadb-connector-c.git synced 2025-08-07 02:42:49 +03:00

few bugs in the tracker support

* ma_multi_malloc wanted uint for size arguments, not size_t
* ma_multi_malloc needs NULL pointer at the end. Simple 0
  is not always the right size
* don't look for tracker info, if the packet does not even
  has the info_len field
This commit is contained in:
Sergei Golubchik
2016-09-21 17:35:54 +02:00
parent f968c04037
commit 4ff192bb40
2 changed files with 88 additions and 85 deletions

View File

@@ -166,13 +166,13 @@ void *ma_multi_malloc(myf myFlags, ...)
{ {
va_list args; va_list args;
char **ptr,*start,*res; char **ptr,*start,*res;
uint tot_length,length; size_t tot_length,length;
va_start(args,myFlags); va_start(args,myFlags);
tot_length=0; tot_length=0;
while ((ptr=va_arg(args, char **))) while ((ptr=va_arg(args, char **)))
{ {
length=va_arg(args,uint); length=va_arg(args, size_t);
tot_length+=ALIGN_SIZE(length); tot_length+=ALIGN_SIZE(length);
} }
va_end(args); va_end(args);
@@ -185,7 +185,7 @@ void *ma_multi_malloc(myf myFlags, ...)
while ((ptr=va_arg(args, char **))) while ((ptr=va_arg(args, char **)))
{ {
*ptr=res; *ptr=res;
length=va_arg(args,uint); length=va_arg(args,size_t);
res+=ALIGN_SIZE(length); res+=ALIGN_SIZE(length);
} }
va_end(args); va_end(args);

View File

@@ -1929,7 +1929,9 @@ get_info:
pos+=2; pos+=2;
mysql->warning_count=uint2korr(pos); mysql->warning_count=uint2korr(pos);
pos+=2; pos+=2;
if (pos < mysql->net.read_pos+length && (item_len= net_field_length(&pos))) if (pos < mysql->net.read_pos+length)
{
if ((item_len= net_field_length(&pos)))
mysql->info=(char*) pos; mysql->info=(char*) pos;
/* check if server supports session tracking */ /* check if server supports session tracking */
@@ -1970,7 +1972,7 @@ get_info:
&session_item, sizeof(LIST), &session_item, sizeof(LIST),
&str, sizeof(MYSQL_LEX_STRING), &str, sizeof(MYSQL_LEX_STRING),
&data, plen, &data, plen,
0)) NULL))
{ {
SET_CLIENT_ERROR(mysql, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); SET_CLIENT_ERROR(mysql, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0);
return -1; return -1;
@@ -2001,7 +2003,7 @@ get_info:
&session_item, sizeof(LIST), &session_item, sizeof(LIST),
&str, sizeof(MYSQL_LEX_STRING), &str, sizeof(MYSQL_LEX_STRING),
&data, plen, &data, plen,
0)) NULL))
{ {
SET_CLIENT_ERROR(mysql, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); SET_CLIENT_ERROR(mysql, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0);
return -1; return -1;
@@ -2040,6 +2042,7 @@ get_info:
} }
} }
} }
}
return(0); return(0);
} }
if (field_count == NULL_LENGTH) /* LOAD DATA LOCAL INFILE */ if (field_count == NULL_LENGTH) /* LOAD DATA LOCAL INFILE */