Server IP : 185.86.78.101 / Your IP : 216.73.216.124 Web Server : Apache System : Linux 675867-vds-valikoshka1996.gmhost.pp.ua 5.4.0-150-generic #167-Ubuntu SMP Mon May 15 17:35:05 UTC 2023 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /www/server/mysql/mysql-test/t/ |
Upload File : |
# In embedded server we don't really have a control over stack usage -- source include/not_embedded.inc # # Bug#21476: Lost Database Connection During Query # # When the amount of stack space we think we need to report an error is # actually too small, then we can get SEGVs. But, we don't want to reserve # space that we could use to get real work done. So, we want the reserved # space small, and this test verifies that the reservation is not too small. CREATE TABLE `t_bug21476` ( `ID_BOARD` smallint(5) unsigned NOT NULL default '0', `ID_MEMBER` mediumint(8) unsigned NOT NULL default '0', `logTime` int(10) unsigned NOT NULL default '0', `ID_MSG` mediumint(8) unsigned NOT NULL default '0', PRIMARY KEY (`ID_MEMBER`,`ID_BOARD`), KEY `logTime` (`logTime`) ) DEFAULT CHARSET=cp1251 COLLATE=cp1251_bulgarian_ci; INSERT INTO `t_bug21476` VALUES (2,2,1154870939,0),(1,2,1154870957,0),(2,183,1154941362,0),(2,84,1154904301,0),(1,84,1154905867,0),(2,13,1154947484,10271),(3,84,1154880549,0),(1,6,1154892183,0),(2,25,1154947581,10271),(3,25,1154904760,0),(1,25,1154947373,10271),(1,179,1154899992,0),(2,179,1154899410,0),(5,25,1154901666,0),(2,329,1154902026,0),(3,329,1154902040,0),(1,329,1154902058,0),(1,13,1154930841,0),(3,85,1154904987,0),(1,183,1154929665,0),(3,13,1154931268,0),(1,85,1154936888,0),(1,169,1154937959,0),(2,169,1154941717,0),(3,183,1154939810,0),(3,169,1154941734,0); delimiter //; let $query_head=UPDATE t_bug21476 SET ID_MSG = IF(logTime BETWEEN 1 AND 1101770053, 2, // let $query_tail =) WHERE logTime BETWEEN 1 AND 1104091539 AND ID_MSG = 0// # Scan over the possible stack heights, trying to recurse to exactly that # depth. Eventually, we will reach our imposed limit on height and try to # raise an error. If the remaining stack space is enough to raise that error, # we will get an error-number of 1436 and quit the loop. If it's not enough # space, we should get a SEGV # Well more than enough recursions to find the end of our stack. let $i = 100000// disable_query_log// disable_result_log// while ($i) { # If we SEGV because the min stack size is exceeded, this would return error # 2013 . error 0,ER_STACK_OVERRUN_NEED_MORE // eval $query_head 0 $query_tail// if ($mysql_errno) { # We reached the place where we reported an error about the stack limit, # and we successfully returned the error. That means that at the stack # limit, we still have enough space reserved to report an error. let $i = 1// # Check that mysql_errname is ER_STACK_OVERRUN_NEED_MORE if ($mysql_errname != ER_STACK_OVERRUN_NEED_MORE) { die Wrong error triggered, expected ER_STACK_OVERRUN_NEED_MORE but got $mysql_errname// } } # Multiplying by three stack frames should be fine enough resolution. # Trading exactness for speed. # go one more level deep let $query_head = $query_head IF(logTime <= 1104091$i, $i, // let $query_tail =) $query_tail// # go one more level deep let $query_head = $query_head IF(logTime <= 1105091$i, $i, // let $query_tail =) $query_tail// # go one more level deep let $query_head = $query_head IF(logTime <= 1106091$i, $i, // let $query_tail =) $query_tail// dec $i// } enable_result_log// enable_query_log// echo Assertion: mysql_errname ER_STACK_OVERRUN_NEED_MORE == $mysql_errname// delimiter ;// DROP TABLE `t_bug21476`; --echo End of 5.0 tests.