• Jon Olav Hauglid's avatar
    Bug #50619 assert in handler::update_auto_increment · 2bbc6f38
    Jon Olav Hauglid authored
    This assert could be triggered if -1 was inserted into
    an auto increment column by a statement writing more than
    one row.
    
    Unless explicitly given, an interval of auto increment values
    is generated when a statement first needs an auto increment
    value. The triggered assert checks that the auto increment
    counter is equal to or higher than the lower bound of this
    interval.
    
    Generally, the auto increment counter starts at 1 and is
    incremented by 1 each time it is used. However, inserting an
    explicit value into the auto increment column, sets the auto
    increment counter to this value + 1 if this value is higher
    than the current value of the auto increment counter.
    
    This bug was triggered if the explicit value was -1. Since the
    value was converted to unsigned before any comparisons were made,
    it was found to be higher than the current vale of the auto
    increment counter and the counter was set to -1 + 1. This value
    was below the reserved interval and caused the assert to be
    triggered the next time the statement tried to write a row.
    
    With the patch for Bug#39828, this bug is no longer repeatable.
    Now, -1 + 1 is detected as an "overflow" which causes the auto
    increment counter to be set to ULONGLONG_MAX. This avoids hitting
    the assert for the next insert and causes a new interval of
    auto increment values to be generated. This resolves the issue.
    
    This patch therefore only contains a regression test and no code
    changes. Test case added to auto_increment.test.
    2bbc6f38
auto_increment.result 11.7 KB