summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-06-19 17:32:34 +0200
committerNikita Popov <nikita.ppv@gmail.com>2020-06-19 17:32:34 +0200
commitaa2e68cf6e4adcaaf884ea6b17f182e3be552fa7 (patch)
tree0d4e553878aafa8d0a0e3c6218fa28a5fee070f5
parentbb61346580242a175c6f771b79f9722405970da1 (diff)
parent525d8a8bfae487bd6890c6bf3688883ef804d82e (diff)
downloadphp-git-aa2e68cf6e4adcaaf884ea6b17f182e3be552fa7.tar.gz
Merge branch 'PHP-7.4'
* PHP-7.4: Fixed bug #79570
-rw-r--r--ext/posix/posix.c18
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;