diff options
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | ext/posix/posix.c | 6 | ||||
-rw-r--r-- | ext/posix/tests/bug75696.phpt | 17 |
3 files changed, 25 insertions, 0 deletions
@@ -2,6 +2,8 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2018, PHP 7.1.23 +- POSIX: + Fixed bug #75696 (posix_getgrnam fails to print details of group). (cmb) 13 Sep 2018, PHP 7.1.22 diff --git a/ext/posix/posix.c b/ext/posix/posix.c index 066139df29..27d91f8a6c 100644 --- a/ext/posix/posix.c +++ b/ext/posix/posix.c @@ -1074,9 +1074,15 @@ PHP_FUNCTION(posix_getgrnam) RETURN_FALSE; } buf = emalloc(buflen); +try_again: g = &gbuf; if (getgrnam_r(name, g, buf, buflen, &g) || g == NULL) { + if (errno == ERANGE) { + buflen *= 2; + buf = erealloc(buf, buflen); + goto try_again; + } POSIX_G(last_error) = errno; efree(buf); RETURN_FALSE; diff --git a/ext/posix/tests/bug75696.phpt b/ext/posix/tests/bug75696.phpt new file mode 100644 index 0000000000..e37f8077ce --- /dev/null +++ b/ext/posix/tests/bug75696.phpt @@ -0,0 +1,17 @@ +--TEST-- +Bug #75696 (posix_getgrnam fails to print details of group) +--SKIPIF-- +<?php +if (!extension_loaded('posix')) die('skip posix extension not available'); +?> +--FILE-- +<?php +$gid = posix_getgid(); +$name = posix_getgrgid($gid)['name']; +$info = posix_getgrnam($name); +var_dump(is_array($info)); +?> +===DONE=== +--EXPECT-- +bool(true) +===DONE=== |