Skip to content

Commit 37acebc

Browse files
committed
Fixed bug #72535 arcfour encryption stream filter crashes php
1 parent a7815e6 commit 37acebc

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

ext/mcrypt/mcrypt_filter.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ static php_stream_filter_status_t php_mcrypt_filter(
8989
php_stream_bucket_delref(bucket TSRMLS_CC);
9090
} else {
9191
/* Stream cipher */
92-
php_stream_bucket_make_writeable(bucket TSRMLS_CC);
92+
bucket = php_stream_bucket_make_writeable(bucket TSRMLS_CC);
9393
if (data->encrypt) {
9494
mcrypt_generic(data->module, bucket->buf, bucket->buflen);
9595
} else {

ext/mcrypt/tests/bug72535.phpt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
--TEST--
2+
Bug #72535 arcfour encryption stream filter crashes php
3+
--SKIPIF--
4+
<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
5+
--FILE--
6+
<?php
7+
$passphrase = 'My secret';
8+
$plaintext = 'Secret secret secret data';
9+
10+
$iv = substr(md5('iv' . $passphrase, true), 0, 8);
11+
$key = substr(md5('pass1' . $passphrase, true) .
12+
md5('pass2' . $passphrase, true), 0, 24);
13+
$opts = array('iv' => $iv, 'key' => $key, 'mode' => 'stream');
14+
15+
$expected = substr($plaintext . $plaintext, 0, 48);
16+
17+
$fp = fopen('php://memory', 'wb+');
18+
stream_filter_append($fp, 'mcrypt.arcfour', STREAM_FILTER_WRITE, $opts);
19+
fwrite($fp, $plaintext);
20+
?>
21+
==NOCRASH==
22+
--EXPECT--
23+
==NOCRASH==

0 commit comments

Comments
 (0)