Commit 7afbf338 authored by Jan Lindström's avatar Jan Lindström

MDEV-7513: ib_warn_row_too_big dereferences null thd

Analysis: Purge thread does not have thd and no access to
handlerton.

Fix: If thd does not exists we use sql_print_warning instead
of push_warning_printf.
parent 5f63c9c0
call mtr.add_suppression("Row size too large (> 8126)*");
CREATE TABLE t1 ( text1 TEXT,
text2 TEXT,
text3 TEXT,
text4 TEXT,
text5 TEXT,
text6 TEXT,
text7 TEXT,
text8 TEXT,
text9 TEXT,
text10 TEXT,
text11 TEXT,
text12 TEXT,
text13 TEXT,
text14 TEXT,
text15 TEXT,
text16 TEXT,
text17 TEXT,
text18 TEXT,
text19 TEXT,
text20 TEXT,
text21 TEXT,
text22 TEXT,
text23 TEXT,
text24 TEXT,
text25 TEXT,
text26 TEXT,
text27 TEXT,
text28 TEXT,
text29 TEXT,
text30 TEXT,
text31 TEXT,
text32 TEXT,
text33 TEXT,
text34 TEXT,
text35 TEXT,
text36 TEXT,
text37 TEXT,
text38 TEXT,
text39 TEXT,
text40 TEXT,
text41 TEXT,
text42 TEXT,
text43 TEXT,
text44 TEXT,
text45 TEXT,
text46 TEXT,
text47 TEXT,
text48 TEXT,
text49 TEXT,
text50 TEXT,
text51 TEXT,
text52 TEXT,
text53 TEXT,
text54 TEXT,
text55 TEXT,
text56 TEXT,
text57 TEXT,
text58 TEXT,
text59 TEXT,
text60 TEXT,
text61 TEXT,
text62 TEXT,
text63 TEXT,
text64 TEXT,
text65 TEXT,
text66 TEXT,
text67 TEXT,
text68 TEXT,
text69 TEXT,
text70 TEXT,
text71 TEXT,
text72 TEXT,
text73 TEXT,
text74 TEXT,
text75 TEXT,
text76 TEXT,
text77 TEXT,
text78 TEXT,
text79 TEXT,
text80 TEXT,
text81 TEXT,
text82 TEXT,
text83 TEXT,
text84 TEXT,
text85 TEXT,
text86 TEXT,
text87 TEXT,
text88 TEXT,
text89 TEXT,
text90 TEXT,
text91 TEXT,
text92 TEXT,
text93 TEXT,
text94 TEXT,
text95 TEXT,
text96 TEXT,
text97 TEXT,
text98 TEXT,
text99 TEXT,
text100 TEXT,
text101 TEXT,
text102 TEXT,
text103 TEXT,
text104 TEXT,
text105 TEXT,
text106 TEXT,
text107 TEXT,
text108 TEXT,
text109 TEXT,
text110 TEXT,
text111 TEXT,
text112 TEXT,
text113 TEXT,
text114 TEXT,
text115 TEXT,
text116 TEXT,
text117 TEXT,
text118 TEXT,
text119 TEXT,
text120 TEXT,
text121 TEXT,
text122 TEXT,
text123 TEXT,
text124 TEXT,
text125 TEXT,
text126 TEXT,
text127 TEXT,
text128 TEXT,
text129 TEXT,
text130 TEXT,
text131 TEXT,
text132 TEXT,
text133 TEXT,
text134 TEXT,
text135 TEXT,
text136 TEXT,
text137 TEXT,
text138 TEXT,
text139 TEXT,
text140 TEXT,
text141 TEXT,
text142 TEXT,
text143 TEXT,
text144 TEXT,
text145 TEXT,
text146 TEXT,
text147 TEXT,
text148 TEXT,
text149 TEXT,
text150 TEXT,
text151 TEXT,
text152 TEXT,
text153 TEXT,
text154 TEXT,
text155 TEXT,
text156 TEXT,
text157 TEXT,
text158 TEXT,
text159 TEXT,
text160 TEXT,
text161 TEXT,
text162 TEXT,
text163 TEXT,
text164 TEXT,
text165 TEXT,
text166 TEXT,
text167 TEXT,
text168 TEXT,
text169 TEXT,
text170 TEXT,
text171 TEXT,
text172 TEXT,
text173 TEXT,
text174 TEXT,
text175 TEXT,
text176 TEXT,
text177 TEXT,
text178 TEXT,
text179 TEXT,
text180 TEXT,
text181 TEXT,
text182 TEXT,
text183 TEXT,
text184 TEXT,
text185 TEXT,
text186 TEXT,
text187 TEXT,
text188 TEXT,
text189 TEXT,
text190 TEXT,
text191 TEXT,
text192 TEXT,
text193 TEXT,
text194 TEXT,
text195 TEXT,
text196 TEXT,
text197 TEXT
) ENGINE = InnoDB;
INSERT INTO t1 VALUES ('abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef');
DELETE FROM t1 WHERE text1 = 'abcdef';
SELECT * from t1;
text1 text2 text3 text4 text5 text6 text7 text8 text9 text10 text11 text12 text13 text14 text15 text16 text17 text18 text19 text20 text21 text22 text23 text24 text25 text26 text27 text28 text29 text30 text31 text32 text33 text34 text35 text36 text37 text38 text39 text40 text41 text42 text43 text44 text45 text46 text47 text48 text49 text50 text51 text52 text53 text54 text55 text56 text57 text58 text59 text60 text61 text62 text63 text64 text65 text66 text67 text68 text69 text70 text71 text72 text73 text74 text75 text76 text77 text78 text79 text80 text81 text82 text83 text84 text85 text86 text87 text88 text89 text90 text91 text92 text93 text94 text95 text96 text97 text98 text99 text100 text101 text102 text103 text104 text105 text106 text107 text108 text109 text110 text111 text112 text113 text114 text115 text116 text117 text118 text119 text120 text121 text122 text123 text124 text125 text126 text127 text128 text129 text130 text131 text132 text133 text134 text135 text136 text137 text138 text139 text140 text141 text142 text143 text144 text145 text146 text147 text148 text149 text150 text151 text152 text153 text154 text155 text156 text157 text158 text159 text160 text161 text162 text163 text164 text165 text166 text167 text168 text169 text170 text171 text172 text173 text174 text175 text176 text177 text178 text179 text180 text181 text182 text183 text184 text185 text186 text187 text188 text189 text190 text191 text192 text193 text194 text195 text196 text197
DROP TABLE t1;
-- source include/have_innodb.inc
-- source include/not_embedded.inc
call mtr.add_suppression("Row size too large (> 8126)*");
CREATE TABLE t1 ( text1 TEXT,
text2 TEXT,
text3 TEXT,
text4 TEXT,
text5 TEXT,
text6 TEXT,
text7 TEXT,
text8 TEXT,
text9 TEXT,
text10 TEXT,
text11 TEXT,
text12 TEXT,
text13 TEXT,
text14 TEXT,
text15 TEXT,
text16 TEXT,
text17 TEXT,
text18 TEXT,
text19 TEXT,
text20 TEXT,
text21 TEXT,
text22 TEXT,
text23 TEXT,
text24 TEXT,
text25 TEXT,
text26 TEXT,
text27 TEXT,
text28 TEXT,
text29 TEXT,
text30 TEXT,
text31 TEXT,
text32 TEXT,
text33 TEXT,
text34 TEXT,
text35 TEXT,
text36 TEXT,
text37 TEXT,
text38 TEXT,
text39 TEXT,
text40 TEXT,
text41 TEXT,
text42 TEXT,
text43 TEXT,
text44 TEXT,
text45 TEXT,
text46 TEXT,
text47 TEXT,
text48 TEXT,
text49 TEXT,
text50 TEXT,
text51 TEXT,
text52 TEXT,
text53 TEXT,
text54 TEXT,
text55 TEXT,
text56 TEXT,
text57 TEXT,
text58 TEXT,
text59 TEXT,
text60 TEXT,
text61 TEXT,
text62 TEXT,
text63 TEXT,
text64 TEXT,
text65 TEXT,
text66 TEXT,
text67 TEXT,
text68 TEXT,
text69 TEXT,
text70 TEXT,
text71 TEXT,
text72 TEXT,
text73 TEXT,
text74 TEXT,
text75 TEXT,
text76 TEXT,
text77 TEXT,
text78 TEXT,
text79 TEXT,
text80 TEXT,
text81 TEXT,
text82 TEXT,
text83 TEXT,
text84 TEXT,
text85 TEXT,
text86 TEXT,
text87 TEXT,
text88 TEXT,
text89 TEXT,
text90 TEXT,
text91 TEXT,
text92 TEXT,
text93 TEXT,
text94 TEXT,
text95 TEXT,
text96 TEXT,
text97 TEXT,
text98 TEXT,
text99 TEXT,
text100 TEXT,
text101 TEXT,
text102 TEXT,
text103 TEXT,
text104 TEXT,
text105 TEXT,
text106 TEXT,
text107 TEXT,
text108 TEXT,
text109 TEXT,
text110 TEXT,
text111 TEXT,
text112 TEXT,
text113 TEXT,
text114 TEXT,
text115 TEXT,
text116 TEXT,
text117 TEXT,
text118 TEXT,
text119 TEXT,
text120 TEXT,
text121 TEXT,
text122 TEXT,
text123 TEXT,
text124 TEXT,
text125 TEXT,
text126 TEXT,
text127 TEXT,
text128 TEXT,
text129 TEXT,
text130 TEXT,
text131 TEXT,
text132 TEXT,
text133 TEXT,
text134 TEXT,
text135 TEXT,
text136 TEXT,
text137 TEXT,
text138 TEXT,
text139 TEXT,
text140 TEXT,
text141 TEXT,
text142 TEXT,
text143 TEXT,
text144 TEXT,
text145 TEXT,
text146 TEXT,
text147 TEXT,
text148 TEXT,
text149 TEXT,
text150 TEXT,
text151 TEXT,
text152 TEXT,
text153 TEXT,
text154 TEXT,
text155 TEXT,
text156 TEXT,
text157 TEXT,
text158 TEXT,
text159 TEXT,
text160 TEXT,
text161 TEXT,
text162 TEXT,
text163 TEXT,
text164 TEXT,
text165 TEXT,
text166 TEXT,
text167 TEXT,
text168 TEXT,
text169 TEXT,
text170 TEXT,
text171 TEXT,
text172 TEXT,
text173 TEXT,
text174 TEXT,
text175 TEXT,
text176 TEXT,
text177 TEXT,
text178 TEXT,
text179 TEXT,
text180 TEXT,
text181 TEXT,
text182 TEXT,
text183 TEXT,
text184 TEXT,
text185 TEXT,
text186 TEXT,
text187 TEXT,
text188 TEXT,
text189 TEXT,
text190 TEXT,
text191 TEXT,
text192 TEXT,
text193 TEXT,
text194 TEXT,
text195 TEXT,
text196 TEXT,
text197 TEXT
) ENGINE = InnoDB;
INSERT INTO t1 VALUES ('abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef');
DELETE FROM t1 WHERE text1 = 'abcdef';
--source include/restart_mysqld.inc
SELECT * from t1;
DROP TABLE t1;
......@@ -12273,12 +12273,24 @@ ib_warn_row_too_big(const dict_table_t* table)
THD* thd = current_thd;
push_warning_printf(
thd, MYSQL_ERROR::WARN_LEVEL_WARN, HA_ERR_TO_BIG_ROW,
"Row size too large (> %lu). Changing some columns to TEXT"
" or BLOB %smay help. In current row format, BLOB prefix of"
" %d bytes is stored inline.", free_space
, prefix ? "or using ROW_FORMAT=DYNAMIC or"
" ROW_FORMAT=COMPRESSED ": ""
, prefix ? DICT_MAX_FIXED_COL_LEN : 0);
if (thd) {
push_warning_printf(
thd, MYSQL_ERROR::WARN_LEVEL_WARN, HA_ERR_TO_BIG_ROW,
"Row size too large (> %lu). Changing some columns to TEXT"
" or BLOB %smay help. In current row format, BLOB prefix of"
" %d bytes is stored inline.", free_space
, prefix ? "or using ROW_FORMAT=DYNAMIC or"
" ROW_FORMAT=COMPRESSED ": ""
, prefix ? DICT_MAX_FIXED_COL_LEN : 0);
} else {
/* Note that we can't use push_warning_printf here because
e.g. purge thread has no thd */
sql_print_warning(
"Row size too large (> %lu). Changing some columns to TEXT"
" or BLOB %smay help. In current row format, BLOB prefix of"
" %d bytes is stored inline.", free_space
, prefix ? "or using ROW_FORMAT=DYNAMIC or"
" ROW_FORMAT=COMPRESSED ": ""
, prefix ? DICT_MAX_FIXED_COL_LEN : 0);
}
}
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