Skip to content

Commit e84c62d

Browse files
committed
MDEV-22504: Session tracking return incorrectly long traking data
When we move data we should fix buffer string length
1 parent 1d1fb13 commit e84c62d

File tree

3 files changed

+42
-3
lines changed

3 files changed

+42
-3
lines changed

mysql-test/r/mysqltest_tracking_info.result

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
set @save_session_track_system_variables=@@session_track_system_variables;
12
SELECT @@session.character_set_connection;
23
@@session.character_set_connection
34
latin1
@@ -28,4 +29,19 @@ SET NAMES 'utf8';
2829

2930
# tracking info off once
3031
SET NAMES 'big5';
31-
SET @@session.session_track_system_variables= default;
32+
SET @@session.session_track_system_variables= @save_session_track_system_variables;
33+
#
34+
# MDEV-22504: session tracking return incorrectly long traking data
35+
#
36+
set @save_optimizer_switch=@@optimizer_switch;
37+
SET @@session.session_track_system_variables='optimizer_switch';
38+
set optimizer_switch='index_merge=off,index_merge_union=off,index_merge_sort_union=off,index_merge_intersection=off,index_merge_sort_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=on,mrr_cost_based=on,mrr_sort_keys=on,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=on,table_elimination=off,extended_keys=off,exists_to_in=off,orderby_uses_equalities=off,condition_pushdown_for_derived=off';
39+
-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
40+
-- optimizer_switch
41+
-- index_merge=off,index_merge_union=off,index_merge_sort_union=off,index_merge_intersection=off,index_merge_sort_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=on,mrr_cost_based=on,mrr_sort_keys=on,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=on,table_elimination=off,extended_keys=off,exists_to_in=off,orderby_uses_equalities=off,condition_pushdown_for_derived=off
42+
43+
Warnings:
44+
Warning 1681 'engine_condition_pushdown=on' is deprecated and will be removed in a future release
45+
set @@optimizer_switch=@save_optimizer_switch;
46+
SET @@session.session_track_system_variables= @save_session_track_system_variables;
47+
# End of 10.2 tests

mysql-test/t/mysqltest_tracking_info.test

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
--source include/no_protocol.inc
33
--source include/not_embedded.inc
44

5+
6+
set @save_session_track_system_variables=@@session_track_system_variables;
7+
58
SELECT @@session.character_set_connection;
69
SET @@session.session_track_system_variables='character_set_connection';
710

@@ -22,4 +25,23 @@ SET NAMES 'utf8';
2225
SET NAMES 'big5';
2326
--disable_session_track_info
2427

25-
SET @@session.session_track_system_variables= default;
28+
SET @@session.session_track_system_variables= @save_session_track_system_variables;
29+
30+
--echo #
31+
--echo # MDEV-22504: session tracking return incorrectly long traking data
32+
--echo #
33+
34+
set @save_optimizer_switch=@@optimizer_switch;
35+
36+
SET @@session.session_track_system_variables='optimizer_switch';
37+
38+
--enable_session_track_info
39+
set optimizer_switch='index_merge=off,index_merge_union=off,index_merge_sort_union=off,index_merge_intersection=off,index_merge_sort_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=on,mrr_cost_based=on,mrr_sort_keys=on,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=on,table_elimination=off,extended_keys=off,exists_to_in=off,orderby_uses_equalities=off,condition_pushdown_for_derived=off';
40+
--disable_session_track_info
41+
42+
set @@optimizer_switch=@save_optimizer_switch;
43+
44+
45+
SET @@session.session_track_system_variables= @save_session_track_system_variables;
46+
47+
--echo # End of 10.2 tests

sql/session_tracker.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1698,7 +1698,7 @@ void Session_tracker::store(THD *thd, String *buf)
16981698

16991699
if ((size= net_length_size(length)) != 1)
17001700
{
1701-
if (buf->reserve(size - 1, EXTRA_ALLOC))
1701+
if (buf->reserve(size - 1, 0))
17021702
{
17031703
buf->length(start); // it is safer to have 0-length block in case of error
17041704
return;
@@ -1708,6 +1708,7 @@ void Session_tracker::store(THD *thd, String *buf)
17081708
The 'buf->reserve()' can change the buf->ptr() so we cannot
17091709
calculate the 'data' earlier.
17101710
*/
1711+
buf->length(buf->length() + (size - 1));
17111712
data= (uchar *)(buf->ptr() + start);
17121713
memmove(data + (size - 1), data, length);
17131714
}

0 commit comments

Comments
 (0)