[MDEV-3816] init-file stops getting executed if a long enough line is encountered; on a debug version, assertion `! is_set() || can_overwrite_status' fails Created: 2012-10-24  Updated: 2012-12-16  Resolved: 2012-12-16

Status: Closed
Project: MariaDB Server
Component/s: None
Affects Version/s: 10.0.0
Fix Version/s: 10.0.1

Type: Bug Priority: Major
Reporter: Elena Stepanova Assignee: Sergei Golubchik
Resolution: Fixed Votes: 0
Labels: None

Attachments: File init.sql    
Issue Links:
Relates

 Description   

The part with the wrong result is also reproducible on MySQL and filed as http://bugs.mysql.com/bug.php?id=67345.

If a server is started with the init-file parameter and the file contains long enough lines (for me, the problem starts with 20,000 characters), it looks like the file stops being executed after such a line is encountered. On a debug build, it causes the assertion failure:

10.0-serg/sql/sql_error.cc:422: void Diagnostics_area::set_error_status(THD*, uint, const char*, const char*): Assertion `! is_set() || can_overwrite_status' failed
 
#6  0x00007fe69ba38d4d in __GI___assert_fail (assertion=0xd6cf80 "! is_set() || can_overwrite_status", file=<optimized out>, line=422, function=<optimized out>) at assert.c:81
#7  0x00000000005ea34b in Diagnostics_area::set_error_status (this=0x3b988e0, thd=0x3b94b90, sql_errno_arg=1149, message_arg=0x38f8e79 "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use", sqlstate=0xd812cb "42000") at 10.0-serg/sql/sql_error.cc:422
#8  0x00000000005d34ae in THD::raise_condition (this=0x3b94b90, sql_errno=1149, sqlstate=0xd812cb "42000", level=MYSQL_ERROR::WARN_LEVEL_ERROR, msg=0x38f8e79 "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use") at 10.0-serg/sql/sql_class.cc:1152
#9  0x00000000005d2c6a in THD::raise_error (this=0x3b94b90, sql_errno=1149) at 10.0-serg/sql/sql_class.cc:1014
#10 0x0000000000609df4 in handle_bootstrap_impl (thd=0x3b94b90) at 10.0-serg/sql/sql_parse.cc:675
#11 0x000000000060a1fc in do_handle_bootstrap (thd=0x3b94b90) at 10.0-serg/sql/sql_parse.cc:762
#12 0x000000000060a186 in handle_bootstrap (arg=0x3b94b90) at 10.0-serg/sql/sql_parse.cc:745
#13 0x0000000000be040b in pfs_spawn_thread (arg=0x3ad4600) at 10.0-serg/storage/perfschema/pfs.cc:1800
#14 0x00007fe69c33defc in start_thread (arg=0x7fe68eee8700) at pthread_create.c:304
#15 0x00007fe69baed59d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
 

The attached file contains 3 lines.
1) creation of a table with one VARCHAR(100) field;
2) big INSERT (191 values);
3) small INSERT (1 value).

For a debug build, the test can be anything, e.g. you can run it as

perl mysql-test-run.pl --mysqld=--init-file=<path to the attached file> main.1st

The assertion fails while the init file is executed.

For a non-debug build, the test is one line:

SELECT COUNT(*) FROM t1;

On 5.5, it returns 192, as expected. On 10.0, it returns 0.

10.0-serg
revision-id: timour@askmonty.org-20121022095529-87ykx0dubnj62c9y
date: 2012-10-22 12:55:29 +0300
revno: 3452



 Comments   
Comment by Sergei Golubchik [ 2012-12-16 ]

20000 byte limit is intentional and hard-coded in sql_bootstrap.h
The crash is fixed.

Generated at Thu Feb 08 06:51:25 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.