Skip to content

Commit 3f4b658

Browse files
author
Nisha Gopalakrishnan
committed
Merge branch 'mysql-5.6' into mysql-5.7
2 parents e361855 + 97c4cd5 commit 3f4b658

File tree

1 file changed

+39
-15
lines changed

1 file changed

+39
-15
lines changed

storage/innobase/handler/ha_innopart.cc

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2805,8 +2805,11 @@ ha_innopart::create(
28052805
part_elem->partition_name,
28062806
part_sep,
28072807
FN_REFLEN - table_name_len);
2808-
if ((table_name_len + len) >= FN_REFLEN) {
2809-
ut_ad(0);
2808+
/* Report error if the partition name with path separator
2809+
exceeds maximum path length. */
2810+
if ((table_name_len + len + sizeof "/") >= FN_REFLEN) {
2811+
error = HA_ERR_INTERNAL_ERROR;
2812+
my_error(ER_PATH_LENGTH, MYF(0), partition_name);
28102813
goto cleanup;
28112814
}
28122815

@@ -2844,8 +2847,11 @@ ha_innopart::create(
28442847
sub_elem->partition_name,
28452848
sub_sep,
28462849
FN_REFLEN - part_name_len);
2847-
if ((len + part_name_len) >= FN_REFLEN) {
2848-
ut_ad(0);
2850+
/* Report error if the partition name with path separator
2851+
exceeds maximum path length. */
2852+
if ((len + part_name_len + sizeof "/") >= FN_REFLEN) {
2853+
error = HA_ERR_INTERNAL_ERROR;
2854+
my_error(ER_PATH_LENGTH, MYF(0), partition_name);
28492855
goto cleanup;
28502856
}
28512857
/* Override part level DATA/INDEX DIRECTORY. */
@@ -2896,11 +2902,20 @@ ha_innopart::create(
28962902
create_info->data_file_name = NULL;
28972903
create_info->index_file_name = NULL;
28982904
while ((part_elem = part_it++)) {
2899-
Ha_innopart_share::append_sep_and_name(
2900-
table_name_end,
2901-
part_elem->partition_name,
2902-
part_sep,
2903-
FN_REFLEN - table_name_len);
2905+
len = Ha_innopart_share::append_sep_and_name(
2906+
table_name_end,
2907+
part_elem->partition_name,
2908+
part_sep,
2909+
FN_REFLEN - table_name_len);
2910+
2911+
/* Report error if table name with partition name exceeds
2912+
maximum length */
2913+
if ((len + table_name_len) >= NAME_LEN) {
2914+
my_error(ER_PATH_LENGTH, MYF(0), table_name);
2915+
error = HA_ERR_INTERNAL_ERROR;
2916+
goto end;
2917+
}
2918+
29042919
if (!form->part_info->is_sub_partitioned()) {
29052920
error = info.create_table_update_dict();
29062921
if (error != 0) {
@@ -2914,12 +2929,21 @@ ha_innopart::create(
29142929
sub_it(part_elem->subpartitions);
29152930
partition_element* sub_elem;
29162931
while ((sub_elem = sub_it++)) {
2917-
Ha_innopart_share::append_sep_and_name(
2918-
part_name_end,
2919-
sub_elem->partition_name,
2920-
sub_sep,
2921-
FN_REFLEN - table_name_len
2922-
- part_name_len);
2932+
len = Ha_innopart_share::append_sep_and_name(
2933+
part_name_end,
2934+
sub_elem->partition_name,
2935+
sub_sep,
2936+
FN_REFLEN - table_name_len
2937+
- part_name_len);
2938+
/* Report error if table name with partition
2939+
name exceeds maximum length */
2940+
if ((len + table_name_len +
2941+
part_name_len) >= NAME_LEN) {
2942+
my_error(ER_PATH_LENGTH, MYF(0), table_name);
2943+
error = HA_ERR_INTERNAL_ERROR;
2944+
goto end;
2945+
}
2946+
29232947
error = info.create_table_update_dict();
29242948
if (error != 0) {
29252949
ut_ad(0);

0 commit comments

Comments
 (0)