{
MCRYPT td;
char *cipher_dir_string, *module_dir_string, *key_copy, *iv_copy;
- int i, status = SUCCESS, count, *key_sizes, key_size, iv_size, block_size, iv_req;
+ int i, status = SUCCESS, count, *key_sizes, key_size, iv_size, block_size;
MCRYPT_GET_INI
mcrypt_free(key_sizes);
iv_size = mcrypt_enc_get_iv_size(td);
- iv_req = mcrypt_enc_mode_has_iv(td);
- if (iv_len) {
- if (iv_len == iv_size) {
- iv_copy = estrndup(iv_str, iv_len);
+ /* IV is required */
+ if (mcrypt_enc_mode_has_iv(td) == 1) {
+ if (iv_len) {
+ if (iv_len == iv_size) {
+ iv_copy = estrndup(iv_str, iv_len);
+ } else {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, MCRYPT_IV_WRONG_SIZE);
+ iv_copy = ecalloc(1, iv_size);
+ memcpy(iv_copy, iv_str, MIN(iv_len, iv_size));
+ }
} else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, MCRYPT_IV_WRONG_SIZE);
- iv_copy = ecalloc(1, iv_size);
- memcpy(iv_copy, iv_str, MIN(iv_len, iv_size));
- }
- } else {
- if (iv_req) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attempt to use an empty IV, which is NOT recommended");
+ iv_copy = ecalloc(1, iv_size);
}
- iv_copy = ecalloc(1, iv_size);
}
if (mcrypt_enc_is_block_mode(td) == 1) {
--- /dev/null
+--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"