Bug #112527 Inconsistent results caused by REPEAT function
Submitted: 26 Sep 2023 14:46 Modified: 27 Sep 2023 7:23
Reporter: Zuming Jiang Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: DML Severity:S2 (Serious)
Version:8.0.11, 8.0.34, 8.1.0 OS:Any
Assigned to: CPU Architecture:Any

[26 Sep 2023 14:46] Zuming Jiang
Description:
Dear MySQL developers,

I used my new fuzzer to fuzz MySQL and found a logic bug that make MySQL server output inconsistent results.

How to repeat:
*** Set up the database ***

create table t1 (vkey int, pkey int);
insert into t1 values (3, 13000);
insert into t1 values (5, 15000);
insert into t1 values (28, 38000);

*** Test Case 1 ***

select  
  count(*) as c_1
from 
  t1 as ref_0
where (REPEAT(REPEAT(case when (null <= ref_0.vkey) then (null) else (case when false then ('o#W4O') else ('o#W4O') end) end, ref_0.vkey), ref_0.pkey)) >= 'i';

I simplified "(case when false then ('o#W4O') else ('o#W4O') end)" to "('o#W4O')", and got Test Case 2:

*** Test Case 2 ***

select  
  count(*) as c_1
from 
  t1 as ref_0
where (REPEAT(REPEAT(case when (null <= ref_0.vkey) then (null) else ('o#W4O') end, ref_0.vkey), ref_0.pkey)) >= 'i';

*** Expected results ***

Test Case 1 and Test Case 2 return the same results.

*** Actual results ***

Test Case 1 and Test Case 2 return inconsistent results.

Test Case 1 return:

+-----+
| c_1 |
+-----+
|   2 |
+-----+
1 row in set, 1 warning (0.01 sec)

Test Case 2 return:

+-----+
| c_1 |
+-----+
|   3 |
+-----+
1 row in set (0.01 sec)

*** Note ***

The bug can be reproduced in version 8.0.3 - 8.0.34. In version 5.6, 5.7 and 8.0.0 - 8.0.2, both Test Case 1 and 2 return the same results:

+-----+
| c_1 |
+-----+
|   2 |
+-----+
1 row in set, 1 warning (0.00 sec)

In version 5.5, Test Case 1 and Test Case 2 also return inconsistent results:

Test Case 1 return:

+-----+
| c_1 |
+-----+
|   1 |
+-----+
1 row in set, 2 warnings (0.00 sec)

Test Case 2 return:

+-----+
| c_1 |
+-----+
|   2 |
+-----+
1 row in set, 1 warning (0.01 sec)
[27 Sep 2023 7:23] MySQL Verification Team
Hello Zuming Jiang,

Thank you for the report and test case.

regards,
Umesh