mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-04 12:56:14 +01:00 
			
		
		
		
	When CURSOR parameters get parsed, their sp_assignment_lex instances (one instance per parameter) get collected to List<sp_assignment_lex>. These instances get linked to sphead only in the end of the list. If a syntax error happened in the middle of the parameter list, these instances were not deleted, which caused memory leaks. Fix: using a Bison %destructor to free rules of the <sp_assignment_lex_list> type (on syntax errors). Afte the fix these sp_assignment_lex instances from CURSOR parameters deleted as follows: - If the CURSOR statement was fully parsed, then these instances get properly linked to sp_head structures, so they are deleted during ~sp_head (this did not change) - If the CURSOR statement failed on a syntax error, then by Bison's %destructor (this is being added in the current patch).
		
			
				
	
	
		
			42 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
#
 | 
						|
# MDEV-30680 Warning: Memory not freed: 280 on mangled query, LeakSanitizer: detected memory leaks
 | 
						|
#
 | 
						|
BEGIN NOT ATOMIC
 | 
						|
IF SCALAR() expected_THEN_here;
 | 
						|
END
 | 
						|
$$
 | 
						|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'expected_THEN_here;
 | 
						|
END' at line 2
 | 
						|
BEGIN NOT ATOMIC
 | 
						|
WHILE SCALAR() expected_DO_here;
 | 
						|
END
 | 
						|
$$
 | 
						|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'expected_DO_here;
 | 
						|
END' at line 2
 | 
						|
BEGIN NOT ATOMIC
 | 
						|
REPEAT SELECT 1; UNTIL SCALAR() expected_END_here;
 | 
						|
END
 | 
						|
$$
 | 
						|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'expected_END_here;
 | 
						|
END' at line 2
 | 
						|
#
 | 
						|
# MDEV-31578 DECLARE CURSOR: "Memory not freed: 280 bytes lost" on syntax error
 | 
						|
#
 | 
						|
BEGIN NOT ATOMIC
 | 
						|
DECLARE cur CURSOR (a INT) FOR SELECT a+1;
 | 
						|
OPEN cur(sp_followed_by_syntax_error();
 | 
						|
CLOSE cur;
 | 
						|
END;
 | 
						|
$$
 | 
						|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ';
 | 
						|
CLOSE cur;
 | 
						|
END' at line 3
 | 
						|
BEGIN NOT ATOMIC
 | 
						|
DECLARE cur CURSOR (a INT) FOR SELECT a+1;
 | 
						|
OPEN cur(1,sp_followed_by_syntax_error();
 | 
						|
CLOSE cur;
 | 
						|
END;
 | 
						|
$$
 | 
						|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ';
 | 
						|
CLOSE cur;
 | 
						|
END' at line 3
 |