summaryrefslogtreecommitdiff
path: root/ext/posix
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2018-09-01 14:27:31 +0200
committerChristoph M. Becker <cmbecker69@gmx.de>2018-09-01 14:28:13 +0200
commit7bcda659f810d55041fbe3b76823ba4c10c03928 (patch)
tree8a6302aaea5e8e192335045cafaa8e3c89751ed5 /ext/posix
parent1ccc4ff260f2eb4c097c9b97df7fadfdc9ef8b4f (diff)
parent2677d438502b68a967d46ffadfadc138070ce762 (diff)
downloadphp-git-7bcda659f810d55041fbe3b76823ba4c10c03928.tar.gz
Merge branch 'PHP-7.1' into PHP-7.2
* PHP-7.1: Fix #75696: posix_getgrnam fails to print details of group
Diffstat (limited to 'ext/posix')
-rw-r--r--ext/posix/posix.c6
-rw-r--r--ext/posix/tests/bug75696.phpt17
2 files changed, 23 insertions, 0 deletions
diff --git a/ext/posix/posix.c b/ext/posix/posix.c
index c3261323fa..1775fb6603 100644
--- a/ext/posix/posix.c
+++ b/ext/posix/posix.c
@@ -1082,9 +1082,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===