Bug #21135 Crash in test "func_time"
- backport patch from 5.0 - "table" can be NULL in temporary fields used for type conversion sql/field.cc: table can be NULL in temporary fields used for type conversion. Store value in field as if db_low_byte_first was set. sql/field.h: table can be NULL in temporary fields used for type conversion. Store value in field as if db_low_byte_first was set.
This commit is contained in:
parent
7332854435
commit
d7c0c66706
46
sql/field.cc
46
sql/field.cc
@ -3680,7 +3680,7 @@ int Field_timestamp::store(const char *from,uint len,CHARSET_INFO *cs)
|
|||||||
error= 2;
|
error= 2;
|
||||||
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
{
|
{
|
||||||
int4store(ptr,tmp);
|
int4store(ptr,tmp);
|
||||||
}
|
}
|
||||||
@ -3738,7 +3738,7 @@ int Field_timestamp::store(longlong nr)
|
|||||||
nr, MYSQL_TIMESTAMP_DATETIME, 1);
|
nr, MYSQL_TIMESTAMP_DATETIME, 1);
|
||||||
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
{
|
{
|
||||||
int4store(ptr,timestamp);
|
int4store(ptr,timestamp);
|
||||||
}
|
}
|
||||||
@ -3762,7 +3762,7 @@ longlong Field_timestamp::val_int(void)
|
|||||||
THD *thd= table->in_use;
|
THD *thd= table->in_use;
|
||||||
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
temp=uint4korr(ptr);
|
temp=uint4korr(ptr);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
@ -3792,7 +3792,7 @@ String *Field_timestamp::val_str(String *val_buffer, String *val_ptr)
|
|||||||
val_buffer->length(field_length);
|
val_buffer->length(field_length);
|
||||||
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
temp=uint4korr(ptr);
|
temp=uint4korr(ptr);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
@ -3857,7 +3857,7 @@ bool Field_timestamp::get_date(TIME *ltime, uint fuzzydate)
|
|||||||
long temp;
|
long temp;
|
||||||
THD *thd= table->in_use;
|
THD *thd= table->in_use;
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
temp=uint4korr(ptr);
|
temp=uint4korr(ptr);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
@ -3894,7 +3894,7 @@ int Field_timestamp::cmp(const char *a_ptr, const char *b_ptr)
|
|||||||
{
|
{
|
||||||
int32 a,b;
|
int32 a,b;
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
{
|
{
|
||||||
a=sint4korr(a_ptr);
|
a=sint4korr(a_ptr);
|
||||||
b=sint4korr(b_ptr);
|
b=sint4korr(b_ptr);
|
||||||
@ -3912,7 +3912,7 @@ int Field_timestamp::cmp(const char *a_ptr, const char *b_ptr)
|
|||||||
void Field_timestamp::sort_string(char *to,uint length __attribute__((unused)))
|
void Field_timestamp::sort_string(char *to,uint length __attribute__((unused)))
|
||||||
{
|
{
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (!table->db_low_byte_first)
|
if (!table || !table->db_low_byte_first)
|
||||||
{
|
{
|
||||||
to[0] = ptr[0];
|
to[0] = ptr[0];
|
||||||
to[1] = ptr[1];
|
to[1] = ptr[1];
|
||||||
@ -3941,7 +3941,7 @@ void Field_timestamp::set_time()
|
|||||||
long tmp= (long) table->in_use->query_start();
|
long tmp= (long) table->in_use->query_start();
|
||||||
set_notnull();
|
set_notnull();
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
{
|
{
|
||||||
int4store(ptr,tmp);
|
int4store(ptr,tmp);
|
||||||
}
|
}
|
||||||
@ -4329,7 +4329,7 @@ int Field_date::store(const char *from, uint len,CHARSET_INFO *cs)
|
|||||||
from, len, MYSQL_TIMESTAMP_DATE, 1);
|
from, len, MYSQL_TIMESTAMP_DATE, 1);
|
||||||
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
{
|
{
|
||||||
int4store(ptr,tmp);
|
int4store(ptr,tmp);
|
||||||
}
|
}
|
||||||
@ -4357,7 +4357,7 @@ int Field_date::store(double nr)
|
|||||||
else
|
else
|
||||||
tmp=(long) rint(nr);
|
tmp=(long) rint(nr);
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
{
|
{
|
||||||
int4store(ptr,tmp);
|
int4store(ptr,tmp);
|
||||||
}
|
}
|
||||||
@ -4385,7 +4385,7 @@ int Field_date::store(longlong nr)
|
|||||||
else
|
else
|
||||||
tmp=(long) nr;
|
tmp=(long) nr;
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
{
|
{
|
||||||
int4store(ptr,tmp);
|
int4store(ptr,tmp);
|
||||||
}
|
}
|
||||||
@ -4411,7 +4411,7 @@ double Field_date::val_real(void)
|
|||||||
{
|
{
|
||||||
int32 j;
|
int32 j;
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
j=sint4korr(ptr);
|
j=sint4korr(ptr);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
@ -4423,7 +4423,7 @@ longlong Field_date::val_int(void)
|
|||||||
{
|
{
|
||||||
int32 j;
|
int32 j;
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
j=sint4korr(ptr);
|
j=sint4korr(ptr);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
@ -4438,7 +4438,7 @@ String *Field_date::val_str(String *val_buffer,
|
|||||||
val_buffer->alloc(field_length);
|
val_buffer->alloc(field_length);
|
||||||
int32 tmp;
|
int32 tmp;
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
tmp=sint4korr(ptr);
|
tmp=sint4korr(ptr);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
@ -4456,7 +4456,7 @@ int Field_date::cmp(const char *a_ptr, const char *b_ptr)
|
|||||||
{
|
{
|
||||||
int32 a,b;
|
int32 a,b;
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
{
|
{
|
||||||
a=sint4korr(a_ptr);
|
a=sint4korr(a_ptr);
|
||||||
b=sint4korr(b_ptr);
|
b=sint4korr(b_ptr);
|
||||||
@ -4474,7 +4474,7 @@ int Field_date::cmp(const char *a_ptr, const char *b_ptr)
|
|||||||
void Field_date::sort_string(char *to,uint length __attribute__((unused)))
|
void Field_date::sort_string(char *to,uint length __attribute__((unused)))
|
||||||
{
|
{
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (!table->db_low_byte_first)
|
if (!table || !table->db_low_byte_first)
|
||||||
{
|
{
|
||||||
to[0] = ptr[0];
|
to[0] = ptr[0];
|
||||||
to[1] = ptr[1];
|
to[1] = ptr[1];
|
||||||
@ -4698,7 +4698,7 @@ int Field_datetime::store(const char *from,uint len,CHARSET_INFO *cs)
|
|||||||
from, len, MYSQL_TIMESTAMP_DATETIME, 1);
|
from, len, MYSQL_TIMESTAMP_DATETIME, 1);
|
||||||
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
{
|
{
|
||||||
int8store(ptr,tmp);
|
int8store(ptr,tmp);
|
||||||
}
|
}
|
||||||
@ -4739,7 +4739,7 @@ int Field_datetime::store(longlong nr)
|
|||||||
MYSQL_TIMESTAMP_DATETIME, 1);
|
MYSQL_TIMESTAMP_DATETIME, 1);
|
||||||
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
{
|
{
|
||||||
int8store(ptr,nr);
|
int8store(ptr,nr);
|
||||||
}
|
}
|
||||||
@ -4766,7 +4766,7 @@ void Field_datetime::store_time(TIME *ltime,timestamp_type type)
|
|||||||
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1);
|
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1);
|
||||||
}
|
}
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
{
|
{
|
||||||
int8store(ptr,tmp);
|
int8store(ptr,tmp);
|
||||||
}
|
}
|
||||||
@ -4792,7 +4792,7 @@ longlong Field_datetime::val_int(void)
|
|||||||
{
|
{
|
||||||
longlong j;
|
longlong j;
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
j=sint8korr(ptr);
|
j=sint8korr(ptr);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
@ -4812,7 +4812,7 @@ String *Field_datetime::val_str(String *val_buffer,
|
|||||||
int part3;
|
int part3;
|
||||||
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
tmp=sint8korr(ptr);
|
tmp=sint8korr(ptr);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
@ -4877,7 +4877,7 @@ int Field_datetime::cmp(const char *a_ptr, const char *b_ptr)
|
|||||||
{
|
{
|
||||||
longlong a,b;
|
longlong a,b;
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
{
|
{
|
||||||
a=sint8korr(a_ptr);
|
a=sint8korr(a_ptr);
|
||||||
b=sint8korr(b_ptr);
|
b=sint8korr(b_ptr);
|
||||||
@ -4895,7 +4895,7 @@ int Field_datetime::cmp(const char *a_ptr, const char *b_ptr)
|
|||||||
void Field_datetime::sort_string(char *to,uint length __attribute__((unused)))
|
void Field_datetime::sort_string(char *to,uint length __attribute__((unused)))
|
||||||
{
|
{
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (!table->db_low_byte_first)
|
if (!table || !table->db_low_byte_first)
|
||||||
{
|
{
|
||||||
to[0] = ptr[0];
|
to[0] = ptr[0];
|
||||||
to[1] = ptr[1];
|
to[1] = ptr[1];
|
||||||
|
@ -713,7 +713,7 @@ public:
|
|||||||
if ((*null_value= is_null()))
|
if ((*null_value= is_null()))
|
||||||
return 0;
|
return 0;
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
if (table->db_low_byte_first)
|
if (table && table->db_low_byte_first)
|
||||||
return sint4korr(ptr);
|
return sint4korr(ptr);
|
||||||
#endif
|
#endif
|
||||||
long tmp;
|
long tmp;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user