From 54da966883bacf28808e26eeda48fe38e21b118e Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 25 Mar 2016 20:18:46 +0100 Subject: Fixed bug #67512 --- NEWS | 2 ++ ext/standard/crypt.c | 19 ++++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/NEWS b/NEWS index e27eef2fda..1f2a906f81 100644 --- a/NEWS +++ b/NEWS @@ -30,6 +30,8 @@ PHP NEWS - Standard: . Fixed bug #71840 (Unserialize accepts wrongly data). (Ryat, Laruence) + . Fixed bug #67512 (php_crypt() crashes if crypt_r() does not exist or + _REENTRANT is not defined). (Nikita) 31 Marc 2016, PHP 5.6.20 diff --git a/ext/standard/crypt.c b/ext/standard/crypt.c index b7ac8d64bd..1b83d6e127 100644 --- a/ext/standard/crypt.c +++ b/ext/standard/crypt.c @@ -236,18 +236,23 @@ PHPAPI int php_crypt(const char *password, const int pass_len, const char *salt, # elif defined(CRYPT_R_CRYPTD) CRYPTD buffer; # else -# error Data struct used by crypt_r() is unknown. Please report. +# error Data struct used by crypt_r() is unknown. Please report. # endif crypt_res = crypt_r(password, salt, &buffer); - if (!crypt_res || (salt[0] == '*' && salt[1] == '0')) { - return FAILURE; - } else { - *result = estrdup(crypt_res); - return SUCCESS; - } } +# elif defined(HAVE_CRYPT) + crypt_res = crypt(password, salt); +# else +# error No crypt() implementation # endif #endif + + if (!crypt_res || (salt[0] == '*' && salt[1] == '0')) { + return FAILURE; + } else { + *result = estrdup(crypt_res); + return SUCCESS; + } } /* }}} */ -- cgit v1.2.1