|
|||||||||||
|
bk commit into 4.1 tree (holyfoot:1.2676) BUG#29494
From: <holyfoot(at)mysql.com>
Date: Fri Jul 20 2007 - 06:42:17 EDT
ChangeSet@1.2676, 2007-07-20 15:42:16+05:00, holyfoot@mysql.com +1 -0 Bug #29494 Field packet with NULL fields crashes libmysqlclient.
unpack_fields() didn't expect NULL_LENGHT in the field's descriptions.
In this case we get NULL in the resulting string so cannot use
strdup_root to make a copy of it.
sql-common/client.c@1.97, 2007-07-20 15:42:14+05:00, holyfoot@mysql.com +9 -9 Bug #29494 Field packet with NULL fields crashes libmysqlclient strdup_root changed with strmake_root in unpack_fields() diff -Nrup a/sql-common/client.c b/sql-common/client.c --- a/sql-common/client.c 2007-01-29 17:31:47 +04:00 +++ b/sql-common/client.c 2007-07-20 15:42:14 +05:00 @@ -602,7 +602,7 @@ net_safe_read(MYSQL *mysql)
if (len == packet_error || len == 0)
DBUG_PRINT("error",("Wrong connection or packet. fd: %s len: %d",
- vio_description(net->vio),len));
+ vio_description(net->vio), len));
#ifdef MYSQL_SERVER
if (vio_was_interrupted(net->vio))
return (packet_error);
@@ -858,7 +858,7 @@ void STDCALL mysql_free_result(MYSQL_RES *result) {
DBUG_ENTER("mysql_free_result");
- DBUG_PRINT("enter",("mysql_res: %lx",result));
+ DBUG_PRINT("enter",("mysql_res: %lx", result));
if (result)
{
uchar *pos;
/* fields count may be wrong */
- DBUG_ASSERT ((field - result) < fields);
+ DBUG_ASSERT ((uint) (field - result) < fields);
cli_fetch_lengths(&lengths[0], row->data, default_value ? 8 : 7);
- field->catalog = strdup_root(alloc,(char*) row->data[0]);
- field->db = strdup_root(alloc,(char*) row->data[1]);
- field->table = strdup_root(alloc,(char*) row->data[2]);
- field->org_table= strdup_root(alloc,(char*) row->data[3]);
- field->name = strdup_root(alloc,(char*) row->data[4]);
- field->org_name = strdup_root(alloc,(char*) row->data[5]);
+ field->catalog= strmake_root(alloc,(char*) row->data[0], lengths[0]);
+ field->db= strmake_root(alloc,(char*) row->data[1], lengths[1]);
+ field->table= strmake_root(alloc,(char*) row->data[2], lengths[2]);
+ field->org_table= strmake_root(alloc,(char*) row->data[3], lengths[3]);
+ field->name= strmake_root(alloc,(char*) row->data[4], lengths[4]);
+ field->org_name= strmake_root(alloc,(char*) row->data[5], lengths[5]);
field->catalog_length= lengths[0];
field->db_length= lengths[1];
-- MySQL Code Commits Mailing List For list archives: http://lists.mysql.com/commits To unsubscribe: http://lists.mysql.com/commits?unsub=lists@pantek.comReceived on Fri Jul 20 07:43:07 2007 This archive was generated by hypermail 2.1.8 : Thu Aug 09 2007 - 19:09:53 EDT |
||||||||||
|
|||||||||||