Commit 4810f300 authored by unknown's avatar unknown

Fix for bug #8477 (Embedded query_cache test crashes)


libmysqld/emb_qcache.cc:
  Querycahce data transition fixed
parent 8ed40c4b
...@@ -71,9 +71,11 @@ void Querycache_stream::store_int(uint i) ...@@ -71,9 +71,11 @@ void Querycache_stream::store_int(uint i)
cur_data+= 4; cur_data+= 4;
return; return;
} }
memcpy(cur_data, &i, rest_len); char buf[4];
int4store(buf, i);
memcpy(cur_data, buf, rest_len);
use_next_block(); use_next_block();
memcpy(cur_data, ((byte*)&i)+rest_len, 4-rest_len); memcpy(cur_data, buf+rest_len, 4-rest_len);
cur_data+= 4-rest_len; cur_data+= 4-rest_len;
} }
...@@ -186,10 +188,12 @@ uint Querycache_stream::load_int() ...@@ -186,10 +188,12 @@ uint Querycache_stream::load_int()
cur_data+= 4; cur_data+= 4;
return result; return result;
} }
memcpy(&result, cur_data, rest_len); char buf[4];
memcpy(buf, cur_data, rest_len);
use_next_block(); use_next_block();
memcpy(((byte*)&result)+rest_len, cur_data, 4-rest_len); memcpy(buf+rest_len, cur_data, 4-rest_len);
cur_data+= 4-rest_len; cur_data+= 4-rest_len;
result= uint4korr(buf);
return result; return result;
} }
...@@ -270,10 +274,10 @@ int Querycache_stream::load_column(MEM_ROOT *alloc, char** column) ...@@ -270,10 +274,10 @@ int Querycache_stream::load_column(MEM_ROOT *alloc, char** column)
return 0; return 0;
} }
len--; len--;
if (!(*column= (char *)alloc_root(alloc, len + 4 + 1))) if (!(*column= (char *)alloc_root(alloc, len + sizeof(uint) + 1)))
return 1; return 1;
int4store(*column, len); *((uint*)*column)= len;
(*column)+= 4; (*column)+= sizeof(uint);
load_str_only(*column, len); load_str_only(*column, len);
return 1; return 1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment