mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 15:50:51 +03:00 
			
		
		
		
	 70f36562bc
			
		
	
	70f36562bc
	
	
	
		
			
			storage engine system variables was not validated and unexpected value was assigned. The check_func_enum function used subtraction from the uint value with the probably negative result. That result of type uint was compared with 0 after casting to signed long type. On architectures where long type is longer than int type the result of comparison was unexpected.
		
			
				
	
	
		
			30 lines
		
	
	
		
			986 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			986 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| CREATE TABLE t1(a int) ENGINE=EXAMPLE;
 | |
| Warnings:
 | |
| Warning	1286	Unknown table engine 'EXAMPLE'
 | |
| Warning	1266	Using storage engine MyISAM for table 't1'
 | |
| DROP TABLE t1;
 | |
| INSTALL PLUGIN example SONAME 'ha_example.so';
 | |
| INSTALL PLUGIN EXAMPLE SONAME 'ha_example.so';
 | |
| ERROR HY000: Function 'EXAMPLE' already exists
 | |
| UNINSTALL PLUGIN example;
 | |
| INSTALL PLUGIN example SONAME 'ha_example.so';
 | |
| CREATE TABLE t1(a int) ENGINE=EXAMPLE;
 | |
| SELECT * FROM t1;
 | |
| a
 | |
| DROP TABLE t1;
 | |
| UNINSTALL PLUGIN example;
 | |
| UNINSTALL PLUGIN EXAMPLE;
 | |
| ERROR 42000: PLUGIN EXAMPLE does not exist
 | |
| UNINSTALL PLUGIN non_exist;
 | |
| ERROR 42000: PLUGIN non_exist does not exist
 | |
| #
 | |
| # Bug#32034: check_func_enum() does not check correct values but set it
 | |
| #            to impossible int val
 | |
| #
 | |
| INSTALL PLUGIN example SONAME 'ha_example.so';
 | |
| SET GLOBAL example_enum_var= e1;
 | |
| SET GLOBAL example_enum_var= e2;
 | |
| SET GLOBAL example_enum_var= impossible;
 | |
| ERROR 42000: Variable 'enum_var' can't be set to the value of 'impossible'
 | |
| UNINSTALL PLUGIN example;
 |