← Back to team overview

maria-developers team mailing list archive

Re: Please review MDEV-13788 Server crash when issuing bad SQL partition syntax

 

Hi Sergei,


On 11/16/2017 08:27 AM, Sergei Golubchik wrote:
> Hi, Alexander!
> 
> On Nov 15, Alexander Barkov wrote:
>> diff --git a/sql/partition_info.cc b/sql/partition_info.cc
>> index 512bf29..740e508 100644
>> --- a/sql/partition_info.cc
>> +++ b/sql/partition_info.cc
>> @@ -2221,6 +2239,8 @@ int partition_info::fix_parser_data(THD *thd)
>>      part_elem= it++;
>>      List_iterator<part_elem_value> list_val_it(part_elem->list_val_list);
>>      num_elements= part_elem->list_val_list.elements;
>> +    if (!num_elements && error_if_requires_values())
>> +      DBUG_RETURN(true);
> 
> I thought the parser was supposed to ensure that VALUES was used where
> needed, so there should be no need to do additional checks here.
> 
> Why does the parser allow invalid syntax?

Unlike, CREATE TABLE, there's nothing we can do during parsing for ALTER
TABLE.

This syntax is generally valid, e.g. for HASH partitioning:

ALTER TABLE t1 REORGANIZE PARTITION p1 INTO
(
  PARTITION p2,
  PARTITION p3
);

It's not valid only for RANGE or LIST partitioning.


The current partition type becomes known only after parsing.
So I extended partition_info::fix_parser_data() to validate
the value list, depending on the partitioning type.


> 
>>      DBUG_ASSERT(part_type == RANGE_PARTITION ?
>>                  num_elements == 1U : TRUE);
>>      for (j= 0; j < num_elements; j++)
> 
> Regards,
> Sergei
> Chief Architect MariaDB
> and security@xxxxxxxxxxx
> 


Follow ups

References