diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-06-19 17:32:34 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-06-19 17:32:34 +0200 |
commit | aa2e68cf6e4adcaaf884ea6b17f182e3be552fa7 (patch) | |
tree | 0d4e553878aafa8d0a0e3c6218fa28a5fee070f5 | |
parent | bb61346580242a175c6f771b79f9722405970da1 (diff) | |
parent | 525d8a8bfae487bd6890c6bf3688883ef804d82e (diff) | |
download | php-git-aa2e68cf6e4adcaaf884ea6b17f182e3be552fa7.tar.gz |
Merge branch 'PHP-7.4'
* PHP-7.4:
Fixed bug #79570
-rw-r--r-- | ext/posix/posix.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/ext/posix/posix.c b/ext/posix/posix.c index 090f47a795..a697c0c467 100644 --- a/ext/posix/posix.c +++ b/ext/posix/posix.c @@ -883,8 +883,14 @@ PHP_FUNCTION(posix_getgrgid) grbuf = emalloc(grbuflen); +try_again: ret = getgrgid_r(gid, &_g, grbuf, grbuflen, &retgrptr); if (ret || retgrptr == NULL) { + if (errno == ERANGE) { + grbuflen *= 2; + grbuf = erealloc(grbuf, grbuflen); + goto try_again; + } POSIX_G(last_error) = ret; efree(grbuf); RETURN_FALSE; @@ -952,7 +958,13 @@ PHP_FUNCTION(posix_getpwnam) buf = emalloc(buflen); pw = &pwbuf; +try_again: if (getpwnam_r(name, pw, buf, buflen, &pw) || pw == NULL) { + if (errno == ERANGE) { + buflen *= 2; + buf = erealloc(buf, buflen); + goto try_again; + } efree(buf); POSIX_G(last_error) = errno; RETURN_FALSE; @@ -1001,8 +1013,14 @@ PHP_FUNCTION(posix_getpwuid) } pwbuf = emalloc(pwbuflen); +try_again: ret = getpwuid_r(uid, &_pw, pwbuf, pwbuflen, &retpwptr); if (ret || retpwptr == NULL) { + if (errno == ERANGE) { + pwbuflen *= 2; + pwbuf = erealloc(pwbuf, pwbuflen); + goto try_again; + } POSIX_G(last_error) = ret; efree(pwbuf); RETURN_FALSE; |