| Bug #107502 | Output of SUBSTRING on LONGBLOB column truncated if starts with NULL byte | ||
|---|---|---|---|
| Submitted: | 7 Jun 2022 12:14 | Modified: | 21 Jul 2022 12:03 |
| Reporter: | Szymon Ka | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | Connector / Python | Severity: | S2 (Serious) |
| Version: | 8.0.29 | OS: | Ubuntu |
| Assigned to: | CPU Architecture: | x86 | |
[7 Jun 2022 14:58]
MySQL Verification Team
Hello Szymon Ka, Thank you for the report. regards, Umesh
[21 Jul 2022 12:02]
Nuno Mariz
Posted by developer: Fixed by BUG#34283402. Thank you for the bug report.

Description: When SUBSTRING is used on a LONGBLOB column and the starting position points to a NULL byte, empty sequence is returned. mysql-connector-python version: 8.0.29 - installed via pip from a binary distribution (.whl) Python: 3.7 It works as expected on 8.0.28 and on 8.0.29 with pure mode. How to repeat: import mysql.connector db_conn_parameters = { 'host': '127.0.0.1', 'database': 'test', 'user': 'root', 'password': '', 'ssl_disabled': True, 'charset': 'utf8', 'use_uicode': True, 'use_pure': False, 'sql_mode': 'TRADITIONAL', 'autocommit': True, } conn = mysql.connector.connect(**db_conn_parameters) cursor = conn.cursor() cursor.execute('DROP TABLE IF EXISTS tbl') cursor.execute('CREATE TABLE tbl(c1 LONGBLOB)') in_val = b'\x01\x01\x00' cursor.execute('INSERT INTO tbl VALUES(%s)', (in_val,)) cursor.execute('SELECT SUBSTRING(c1, 3, 1) FROM tbl') res = cursor.fetchone() print(len(res[0])) # prints "0" on 8.0.29 assert len(res[0]) == 1