From c116ecf2079d4ca1acdc2824308420d4112514c6 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Wed, 31 May 2006 20:09:07 +0000 Subject: [PATCH] - There was nothing wrong here, bug report #37595 is bogus. - Added a new test case to demonstrate a longer plain text. --- NEWS | 2 -- ext/mcrypt/mcrypt.c | 10 +++++++++- ext/mcrypt/tests/blowfish.phpt | 16 +++++++++++++++- ext/mcrypt/tests/bug37595.phpt | Bin 988 -> 955 bytes 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index a9c2e616ec..db78febd82 100644 --- a/NEWS +++ b/NEWS @@ -55,8 +55,6 @@ PHP NEWS - Fixed bug #37616 (DATE_RFC822 does not product RFC 822 dates). (Hannes Magnusson, Derick) - Fixed bug #37614 (Class name lowercased in error message). (Johannes) -- Fixed bug #37595 (mcrypt_generic calculates data length in wrong way). - (Tony) - Fixed bug #37587 (var without attribute causes segfault). (Marcus) - Fixed bug #37586 (Bumped minimum PCRE version to 6.6, needed for recursion limit support). (Ilia) diff --git a/ext/mcrypt/mcrypt.c b/ext/mcrypt/mcrypt.c index a76ae2ee58..da4ce8ef79 100644 --- a/ext/mcrypt/mcrypt.c +++ b/ext/mcrypt/mcrypt.c @@ -492,11 +492,15 @@ PHP_FUNCTION(mcrypt_generic) ZEND_FETCH_RESOURCE(pm, php_mcrypt *, mcryptind, -1, "MCrypt", le_mcrypt); PHP_MCRYPT_INIT_CHECK convert_to_string_ex(data); + if (Z_STRLEN_PP(data) == 0) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "An empty string was passed"); + RETURN_FALSE + } /* Check blocksize */ if (mcrypt_enc_is_block_mode(pm->td) == 1) { /* It's a block algorithm */ block_size = mcrypt_enc_get_block_size(pm->td); - data_size = ((Z_STRLEN_PP(data) / block_size) + 1) * block_size; + data_size = (((Z_STRLEN_PP(data) - 1) / block_size) + 1) * block_size; data_s = emalloc(data_size + 1); memset(data_s, 0, data_size); memcpy(data_s, Z_STRVAL_PP(data), Z_STRLEN_PP(data)); @@ -533,6 +537,10 @@ PHP_FUNCTION(mdecrypt_generic) ZEND_FETCH_RESOURCE(pm, php_mcrypt * , mcryptind, -1, "MCrypt", le_mcrypt); PHP_MCRYPT_INIT_CHECK convert_to_string_ex(data); + if (Z_STRLEN_PP(data) == 0) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "An empty string was passed"); + RETURN_FALSE + } /* Check blocksize */ if (mcrypt_enc_is_block_mode(pm->td) == 1) { /* It's a block algorithm */ diff --git a/ext/mcrypt/tests/blowfish.phpt b/ext/mcrypt/tests/blowfish.phpt index dc51da65b3..ce258d3e13 100644 --- a/ext/mcrypt/tests/blowfish.phpt +++ b/ext/mcrypt/tests/blowfish.phpt @@ -36,7 +36,19 @@ foreach($vectors as $data) { ($crypt==$guess ? "OK" : "BAD") ); } -} +} + +// Longer test case from http://www.schneier.com/code/vectors.txt +$td = mcrypt_module_open ("blowfish", "", MCRYPT_MODE_CBC, ""); + +$key = hex2bin( "0123456789ABCDEFF0E1D2C3B4A59687" ); +$iv = hex2bin( "FEDCBA9876543210" ); +$plain = hex2bin( "37363534333231204E6F77206973207468652074696D6520666F722000" ); + +mcrypt_generic_init( $td, $key, $iv ); +$guess = bin2hex( mcrypt_generic( $td, $plain ) ); + +echo "\n", $guess, "\n"; ?> --EXPECT-- key plain crypt guess stat @@ -73,3 +85,5 @@ E0FEE0FEF1FEF1FE 0123456789ABCDEF c39e072d9fac631d c39e072d9fac631d OK FFFFFFFFFFFFFFFF 0000000000000000 f21e9a77b71c49bc f21e9a77b71c49bc OK 0123456789ABCDEF 0000000000000000 245946885754369a 245946885754369a OK FEDCBA9876543210 FFFFFFFFFFFFFFFF 6b5c5a9c5d9e0a5a 6b5c5a9c5d9e0a5a OK + +6b77b4d63006dee605b156e27403979358deb9e7154616d959f1652bd5ff92cc diff --git a/ext/mcrypt/tests/bug37595.phpt b/ext/mcrypt/tests/bug37595.phpt index a74b8cfaa80aa2e98687d91be101e3492b948491..3499612bf46fcdff0d2b300e1edd1e0b98ddd17a 100644 GIT binary patch delta 102 zcmcb^zMFl6KNF+FWPhe&7KhxF)X4!%B9m`2dGT0iDkvEm8Jn1znOjV@U{*H+2{1rK jl(>@e^K&%P5_5`EHMxpQiZb)kH4M#=w7|8lXVwJ(fW8`l delta 100 zcmdnZeusU7Khxv@refyYl+?+AOd^wSGkHy}Wai~yfP%?}%<5W(W||6042DL=CZ=ZQ cFc~GT;*z4wymSo