mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-25 18:38:00 +03:00 
			
		
		
		
	to wrong results
      
3 problems found with DES_ENCRYPT/DES_DECRYPT :
1. The max length was not calculated properly. Fixed in fix_length_and_dec()
2. DES_ENCRYPT had a side effect of sometimes reallocating and changing 
the value of its argument. Fixed by explicitly pre-allocating the necessary
space to pad the argument with trailing '*' (stars) when calculating the 
DES digest.
3. in DES_ENCRYPT the string buffer for the result value was not 
reallocated to the correct size and only string length was assigned to it. 
Fixed by making sure there's enough space to hold the result.
		
	
		
			
				
	
	
		
			40 lines
		
	
	
		
			885 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			885 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| -- source include/have_ssl.inc
 | |
| 
 | |
| # This test can't be in func_encrypt.test, because it requires
 | |
| # --des-key-file to not be set.
 | |
| 
 | |
| #
 | |
| # Bug #11643: des_encrypt() causes server to die
 | |
| #
 | |
| select des_encrypt('hello');
 | |
| 
 | |
| # End of 4.1 tests
 | |
| 
 | |
| --echo #
 | |
| --echo # Bug #11643: des_encrypt() causes server to die
 | |
| --echo #
 | |
| 
 | |
| CREATE TABLE t1 (des VARBINARY(200) NOT NULL DEFAULT '') ENGINE=MyISAM;
 | |
| 
 | |
| INSERT INTO t1 VALUES ('1234'), ('12345'), ('123456'), ('1234567');
 | |
| 
 | |
| UPDATE t1 SET des=DES_ENCRYPT('1234');
 | |
| 
 | |
| SELECT LENGTH(des) FROM t1;
 | |
| SELECT DES_DECRYPT(des) FROM t1;
 | |
| 
 | |
| SELECT 
 | |
|  LENGTH(DES_ENCRYPT('1234')), 
 | |
|  LENGTH(DES_ENCRYPT('12345')), 
 | |
|  LENGTH(DES_ENCRYPT('123456')), 
 | |
|  LENGTH(DES_ENCRYPT('1234567'));
 | |
| SELECT 
 | |
|  DES_DECRYPT(DES_ENCRYPT('1234')), 
 | |
|  DES_DECRYPT(DES_ENCRYPT('12345')), 
 | |
|  DES_DECRYPT(DES_ENCRYPT('123456')), 
 | |
|  DES_DECRYPT(DES_ENCRYPT('1234567'));
 | |
| 
 | |
| DROP TABLE t1;
 | |
| 
 | |
| --Echo End of 5.0 tests
 |