mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-12357 Invalid read of size 8 in Type_aggregator::Type_aggregator()
This commit is contained in:
@ -2221,6 +2221,7 @@ void clean_up(bool print_message)
|
|||||||
#endif
|
#endif
|
||||||
wsrep_thr_deinit();
|
wsrep_thr_deinit();
|
||||||
my_uuid_end();
|
my_uuid_end();
|
||||||
|
delete type_handler_data;
|
||||||
delete binlog_filter;
|
delete binlog_filter;
|
||||||
delete global_rpl_filter;
|
delete global_rpl_filter;
|
||||||
end_ssl();
|
end_ssl();
|
||||||
@ -4126,6 +4127,13 @@ static int init_common_variables()
|
|||||||
sf_malloc_dbug_id= mariadb_dbug_id;
|
sf_malloc_dbug_id= mariadb_dbug_id;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (!(type_handler_data= new Type_handler_data) ||
|
||||||
|
type_handler_data->init())
|
||||||
|
{
|
||||||
|
sql_perror("Could not allocate type_handler_data");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
max_system_variables.pseudo_thread_id= ~(my_thread_id) 0;
|
max_system_variables.pseudo_thread_id= ~(my_thread_id) 0;
|
||||||
server_start_time= flush_status_time= my_time(0);
|
server_start_time= flush_status_time= my_time(0);
|
||||||
my_disable_copystat_in_redel= 1;
|
my_disable_copystat_in_redel= 1;
|
||||||
|
@ -57,47 +57,40 @@ Type_handler_geometry type_handler_geometry;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
Type_aggregator type_aggregator_for_result;
|
bool Type_handler_data::init()
|
||||||
Type_aggregator type_aggregator_for_comparison;
|
|
||||||
|
|
||||||
|
|
||||||
class Static_data_initializer
|
|
||||||
{
|
{
|
||||||
public:
|
|
||||||
static Static_data_initializer m_singleton;
|
|
||||||
Static_data_initializer()
|
|
||||||
{
|
|
||||||
#ifdef HAVE_SPATIAL
|
#ifdef HAVE_SPATIAL
|
||||||
type_aggregator_for_result.add(&type_handler_geometry,
|
return
|
||||||
&type_handler_null,
|
m_type_aggregator_for_result.add(&type_handler_geometry,
|
||||||
&type_handler_geometry);
|
&type_handler_null,
|
||||||
type_aggregator_for_result.add(&type_handler_geometry,
|
&type_handler_geometry) ||
|
||||||
&type_handler_geometry,
|
m_type_aggregator_for_result.add(&type_handler_geometry,
|
||||||
&type_handler_geometry);
|
&type_handler_geometry,
|
||||||
type_aggregator_for_result.add(&type_handler_geometry,
|
&type_handler_geometry) ||
|
||||||
&type_handler_blob,
|
m_type_aggregator_for_result.add(&type_handler_geometry,
|
||||||
&type_handler_long_blob);
|
&type_handler_blob,
|
||||||
type_aggregator_for_result.add(&type_handler_geometry,
|
&type_handler_long_blob) ||
|
||||||
&type_handler_varchar,
|
m_type_aggregator_for_result.add(&type_handler_geometry,
|
||||||
&type_handler_long_blob);
|
&type_handler_varchar,
|
||||||
type_aggregator_for_result.add(&type_handler_geometry,
|
&type_handler_long_blob) ||
|
||||||
&type_handler_string,
|
m_type_aggregator_for_result.add(&type_handler_geometry,
|
||||||
&type_handler_long_blob);
|
&type_handler_string,
|
||||||
|
&type_handler_long_blob) ||
|
||||||
type_aggregator_for_comparison.add(&type_handler_geometry,
|
m_type_aggregator_for_comparison.add(&type_handler_geometry,
|
||||||
&type_handler_geometry,
|
&type_handler_geometry,
|
||||||
&type_handler_geometry);
|
&type_handler_geometry) ||
|
||||||
type_aggregator_for_comparison.add(&type_handler_geometry,
|
m_type_aggregator_for_comparison.add(&type_handler_geometry,
|
||||||
&type_handler_null,
|
&type_handler_null,
|
||||||
&type_handler_geometry);
|
&type_handler_geometry) ||
|
||||||
type_aggregator_for_comparison.add(&type_handler_geometry,
|
m_type_aggregator_for_comparison.add(&type_handler_geometry,
|
||||||
&type_handler_long_blob,
|
&type_handler_long_blob,
|
||||||
&type_handler_long_blob);
|
&type_handler_long_blob);
|
||||||
#endif
|
#endif
|
||||||
}
|
return false;
|
||||||
};
|
}
|
||||||
|
|
||||||
Static_data_initializer Static_data_initializer::m_singleton;
|
|
||||||
|
Type_handler_data *type_handler_data= NULL;
|
||||||
|
|
||||||
|
|
||||||
void Type_std_attributes::set(const Field *field)
|
void Type_std_attributes::set(const Field *field)
|
||||||
@ -293,7 +286,8 @@ Type_handler_hybrid_field_type::aggregate_for_result(const Type_handler *other)
|
|||||||
Type_handler::aggregate_for_result_traditional(m_type_handler, other);
|
Type_handler::aggregate_for_result_traditional(m_type_handler, other);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
other= type_aggregator_for_result.find_handler(m_type_handler, other);
|
other= type_handler_data->
|
||||||
|
m_type_aggregator_for_result.find_handler(m_type_handler, other);
|
||||||
if (!other)
|
if (!other)
|
||||||
return true;
|
return true;
|
||||||
m_type_handler= other;
|
m_type_handler= other;
|
||||||
@ -407,7 +401,8 @@ Type_handler_hybrid_field_type::aggregate_for_comparison(const Type_handler *h)
|
|||||||
if (!m_type_handler->is_traditional_type() ||
|
if (!m_type_handler->is_traditional_type() ||
|
||||||
!h->is_traditional_type())
|
!h->is_traditional_type())
|
||||||
{
|
{
|
||||||
h= type_aggregator_for_comparison.find_handler(m_type_handler, h);
|
h= type_handler_data->
|
||||||
|
m_type_aggregator_for_comparison.find_handler(m_type_handler, h);
|
||||||
if (!h)
|
if (!h)
|
||||||
return true;
|
return true;
|
||||||
m_type_handler= h;
|
m_type_handler= h;
|
||||||
|
@ -1522,7 +1522,16 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
extern Type_aggregator type_aggregator_for_result;
|
|
||||||
extern Type_aggregator type_aggregator_for_comparison;
|
class Type_handler_data
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Type_aggregator m_type_aggregator_for_result;
|
||||||
|
Type_aggregator m_type_aggregator_for_comparison;
|
||||||
|
bool init();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
extern Type_handler_data *type_handler_data;
|
||||||
|
|
||||||
#endif /* SQL_TYPE_H_INCLUDED */
|
#endif /* SQL_TYPE_H_INCLUDED */
|
||||||
|
Reference in New Issue
Block a user