]> granicus.if.org Git - php/commitdiff
- MFH: Fixed bug #46010 (warnings incorrectly generated for iv in ecb mode)
authorFelipe Pena <felipe@php.net>
Sun, 7 Sep 2008 23:00:31 +0000 (23:00 +0000)
committerFelipe Pena <felipe@php.net>
Sun, 7 Sep 2008 23:00:31 +0000 (23:00 +0000)
ext/mcrypt/mcrypt.c
ext/mcrypt/tests/bug46010.phpt [new file with mode: 0644]
ext/mcrypt/tests/mcrypt_ecb.phpt

index c52317e4d4fa0be1f4947b8ee1272f9158a9cbec..ed9ae088d54f3e78af99b308010d9b2ecd18f3da 100644 (file)
@@ -1041,15 +1041,17 @@ static void php_mcrypt_do_crypt (char* cipher, zval **key, zval **data, char *mo
        /* Check IV */
        iv_s = NULL;
        iv_size = mcrypt_enc_get_iv_size (td);
-       if (argc == 5) {
-               if (iv_size != Z_STRLEN_PP(iv)) {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, MCRYPT_IV_WRONG_SIZE);
-               } else {
-                       iv_s = emalloc(iv_size + 1);
-                       memcpy(iv_s, Z_STRVAL_PP(iv), iv_size);
-               }
-       } else if (argc == 4) {
-               if (iv_size != 0) {
+       
+       /* IV is required */
+       if (mcrypt_enc_mode_has_iv(td) == 1) {
+               if (argc == 5) {
+                       if (iv_size != Z_STRLEN_PP(iv)) {
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, MCRYPT_IV_WRONG_SIZE);
+                       } else {
+                               iv_s = emalloc(iv_size + 1);
+                               memcpy(iv_s, Z_STRVAL_PP(iv), iv_size);
+                       }
+               } else if (argc == 4) {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attempt to use an empty IV, which is NOT recommend");
                        iv_s = emalloc(iv_size + 1);
                        memset(iv_s, 0, iv_size + 1);
diff --git a/ext/mcrypt/tests/bug46010.phpt b/ext/mcrypt/tests/bug46010.phpt
new file mode 100644 (file)
index 0000000..5aeb311
--- /dev/null
@@ -0,0 +1,14 @@
+--TEST---
+Bug #46010 (warnings incorrectly generated for iv in ecb mode)
+--FILE--
+<?php
+
+var_dump(bin2hex(mcrypt_encrypt(MCRYPT_TRIPLEDES, "key", "data", MCRYPT_MODE_ECB)));
+var_dump(bin2hex(mcrypt_encrypt(MCRYPT_TRIPLEDES, "key", "data", MCRYPT_MODE_ECB, "a")));
+var_dump(bin2hex(mcrypt_encrypt(MCRYPT_TRIPLEDES, "key", "data", MCRYPT_MODE_ECB, "12345678")));
+
+?>
+--EXPECTF--
+string(16) "372eeb4a524b8d31"
+string(16) "372eeb4a524b8d31"
+string(16) "372eeb4a524b8d31"
index 75d9570922201489f633664dc7585bcab795b2f0..3edc407157bcd13a520d8528603b59d490c4f0f6 100644 (file)
@@ -14,10 +14,10 @@ $enc_data = mcrypt_ecb($cipher, $key, $secret, MCRYPT_ENCRYPT, $iv);
 // we have to trim as AES rounds the blocks and decrypt doesnt detect that
 echo trim(mcrypt_ecb($cipher, $key, $enc_data, MCRYPT_DECRYPT, $iv)) . "\n";
 
-// a warning must be issued if we don't use a IV on a AES cipher, that usually requires an IV
+// a warning not must be issued if we don't use a IV on a AES cipher, that not requires an IV
 mcrypt_ecb($cipher, $key, $enc_data, MCRYPT_DECRYPT);
 
 --EXPECTF--
 PHP Testfest 2008
 
-Warning: mcrypt_ecb(): Attempt to use an empty IV, which is NOT recommend in %s on line %d
+