Skip to content

Commit aa2e68c

Browse files
committed
Merge branch 'PHP-7.4'
* PHP-7.4: Fixed bug #79570
2 parents bb61346 + 525d8a8 commit aa2e68c

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

ext/posix/posix.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -883,8 +883,14 @@ PHP_FUNCTION(posix_getgrgid)
883883

884884
grbuf = emalloc(grbuflen);
885885

886+
try_again:
886887
ret = getgrgid_r(gid, &_g, grbuf, grbuflen, &retgrptr);
887888
if (ret || retgrptr == NULL) {
889+
if (errno == ERANGE) {
890+
grbuflen *= 2;
891+
grbuf = erealloc(grbuf, grbuflen);
892+
goto try_again;
893+
}
888894
POSIX_G(last_error) = ret;
889895
efree(grbuf);
890896
RETURN_FALSE;
@@ -952,7 +958,13 @@ PHP_FUNCTION(posix_getpwnam)
952958
buf = emalloc(buflen);
953959
pw = &pwbuf;
954960

961+
try_again:
955962
if (getpwnam_r(name, pw, buf, buflen, &pw) || pw == NULL) {
963+
if (errno == ERANGE) {
964+
buflen *= 2;
965+
buf = erealloc(buf, buflen);
966+
goto try_again;
967+
}
956968
efree(buf);
957969
POSIX_G(last_error) = errno;
958970
RETURN_FALSE;
@@ -1001,8 +1013,14 @@ PHP_FUNCTION(posix_getpwuid)
10011013
}
10021014
pwbuf = emalloc(pwbuflen);
10031015

1016+
try_again:
10041017
ret = getpwuid_r(uid, &_pw, pwbuf, pwbuflen, &retpwptr);
10051018
if (ret || retpwptr == NULL) {
1019+
if (errno == ERANGE) {
1020+
pwbuflen *= 2;
1021+
pwbuf = erealloc(pwbuf, pwbuflen);
1022+
goto try_again;
1023+
}
10061024
POSIX_G(last_error) = ret;
10071025
efree(pwbuf);
10081026
RETURN_FALSE;

0 commit comments

Comments
 (0)