@@ -2805,8 +2805,11 @@ ha_innopart::create(
2805
2805
part_elem->partition_name ,
2806
2806
part_sep,
2807
2807
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);
2810
2813
goto cleanup;
2811
2814
}
2812
2815
@@ -2844,8 +2847,11 @@ ha_innopart::create(
2844
2847
sub_elem->partition_name ,
2845
2848
sub_sep,
2846
2849
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);
2849
2855
goto cleanup;
2850
2856
}
2851
2857
/* Override part level DATA/INDEX DIRECTORY. */
@@ -2896,11 +2902,20 @@ ha_innopart::create(
2896
2902
create_info->data_file_name = NULL ;
2897
2903
create_info->index_file_name = NULL ;
2898
2904
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
+
2904
2919
if (!form->part_info ->is_sub_partitioned ()) {
2905
2920
error = info.create_table_update_dict ();
2906
2921
if (error != 0 ) {
@@ -2914,12 +2929,21 @@ ha_innopart::create(
2914
2929
sub_it (part_elem->subpartitions );
2915
2930
partition_element* sub_elem;
2916
2931
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
+
2923
2947
error = info.create_table_update_dict ();
2924
2948
if (error != 0 ) {
2925
2949
ut_ad (0 );
0 commit comments