com php-src: Fixed bug #70625: NEWS ext/mcrypt/mcrypt.c ext/mcrypt/tests/bug70625.phpt
| From: | Nikita Popov | Date: | Sat, 03 Oct 2015 08:12:11 +0000 |
| Subject: | com php-src: Fixed bug #70625: NEWS ext/mcrypt/mcrypt.c ext/mcrypt/tests/bug70625.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-89272@lists.php.net to get a copy of this message | ||
Commit: fe1933aae2185624bd51b1fd46b8d959f88daf4a
Author: Nikita Popov <nikic@php.net> Sat, 3 Oct 2015 10:12:11 +0200
Parents: 6f895a29c9335b78a7efd0725802e78a8d2ed2d5
Branches: PHP-5.6 PHP-7.0 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=fe1933aae2185624bd51b1fd46b8d959f88daf4a
Log:
Fixed bug #70625
Bugs:
https://bugs.php.net/70625
Changed paths:
M NEWS
M ext/mcrypt/mcrypt.c
A ext/mcrypt/tests/bug70625.phpt
Diff:
diff --git a/NEWS b/NEWS
index 6bade38..7f5c7a4 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,10 @@ PHP NEWS
- Date:
. Fixed bug #70619 (DateTimeImmutable segfault). (Laruence)
+- Mcrypt:
+ . Fixed bug #70625 (mcrypt_encrypt() won't return data when no IV was
+ specified under RC4). (Nikita)
+
- Mysqlnd:
. Fixed bug #70384 (mysqli_real_query():Unknown type 245 sent by the server).
(Andrey)
diff --git a/ext/mcrypt/mcrypt.c b/ext/mcrypt/mcrypt.c
index 5b34112..624e2ce 100644
--- a/ext/mcrypt/mcrypt.c
+++ b/ext/mcrypt/mcrypt.c
@@ -1237,6 +1237,10 @@ static int php_mcrypt_ensure_valid_iv(MCRYPT td, const char *iv, int iv_size
TSR
{
if (mcrypt_enc_mode_has_iv(td) == 1) {
int expected_iv_size = mcrypt_enc_get_iv_size(td);
+ if (expected_iv_size == 0) {
+ /* Algorithm does not use IV, even though mode supports it */
+ return SUCCESS;
+ }
if (!iv) {
php_error_docref(NULL TSRMLS_CC, E_WARNING,
diff --git a/ext/mcrypt/tests/bug70625.phpt b/ext/mcrypt/tests/bug70625.phpt
new file mode 100644
index 0000000..e9c0de0
--- /dev/null
+++ b/ext/mcrypt/tests/bug70625.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Bug #70625: mcrypt_encrypt() : won't return data when no IV was specified under RC4
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+
+$key = 'secretkey';
+$ciphertext = mcrypt_encrypt(MCRYPT_ARCFOUR, $key, 'payload', MCRYPT_MODE_STREAM);
+var_dump(bin2hex($ciphertext));
+$plaintext = mcrypt_decrypt(MCRYPT_ARCFOUR, $key, $ciphertext, MCRYPT_MODE_STREAM);
+var_dump($plaintext);
+
+?>
+--EXPECT--
+string(14) "d5c9a57023d0f1"
+string(7) "payload"