Bug #51059 crypt() segfaults on certain salts
--FILE--
<?php
-$res = crypt('a', '_');
-if ($res == '*0' || $res == '*1') echo 'OK';
+$res = crypt(b'a', b'_');
+if ($res === b'*0' || $res === b'*1') echo 'OK';
else echo 'Not OK';
?>
+++ /dev/null
---TEST--
-Test Blowfish crypt() with invalid rounds
---FILE--
-<?php
-
-foreach(range(32, 38) as $i) {
- if (crypt('U*U', '$2a$'.$i.'$CCCCCCCCCCCCCCCCCCCCCC$') === FALSE) {
- echo "$i. OK\n";
- } else {
- echo "$i. Not OK\n";
- }
-}
-
-?>
---EXPECT--
-32. OK
-33. OK
-34. OK
-35. OK
-36. OK
-37. OK
-38. OK
--- /dev/null
+--TEST--
+Test Blowfish crypt() with invalid rounds
+--SKIPIF--
+<?php
+if (!function_exists('crypt') || !defined("CRYPT_BLOWFISH")) {
+ die("SKIP crypt()-blowfish is not available");
+}
+?>
+--FILE--
+<?php
+
+$salts = array(b'32' => b'$2a$32$CCCCCCCCCCCCCCCCCCCCCC$',
+ b'33' => b'$2a$33$CCCCCCCCCCCCCCCCCCCCCC$',
+ b'34' => b'$2a$34$CCCCCCCCCCCCCCCCCCCCCC$',
+ b'35' => b'$2a$35$CCCCCCCCCCCCCCCCCCCCCC$',
+ b'36' => b'$2a$36$CCCCCCCCCCCCCCCCCCCCCC$',
+ b'37' => b'$2a$37$CCCCCCCCCCCCCCCCCCCCCC$',
+ b'38' => b'$2a$38$CCCCCCCCCCCCCCCCCCCCCC$',);
+
+foreach($salts as $i=>$salt) {
+ $crypt = crypt(b'U*U', $salt);
+ if ($crypt === b'*0' || $crypt === b'*1') {
+ echo "$i. OK\n";
+ } else {
+ echo "$i. Not OK\n";
+ }
+}
+
+?>
+--EXPECT--
+32. OK
+33. OK
+34. OK
+35. OK
+36. OK
+37. OK
+38. OK
--- /dev/null
+--TEST--
+Test Blowfish crypt() falls back to DES when rounds are not specified,
+or Blowfish is not available.
+--FILE--
+<?php
+$crypt = crypt(b'U*U', b'$2a$CCCCCCCCCCCCCCCCCCCCC.E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW');
+if ($crypt===b'$2SHYF.wPGyfE') {
+ echo "OK\n";
+} else {
+ echo "Not OK\n";
+}
+?>
+--EXPECT--
+OK