ID: 40600
User updated by: stas at FreeBSD dot org
Reported By: stas at FreeBSD dot org
Status: Open
Bug Type: POSIX related
Operating System: FreeBSD
PHP Version: 5.2.1
New Comment:
The patch itself:
----------------------------------------------------------------
--- posix.c.orig Fri Jan 12 04:46:11 2007
+++ posix.c Thu Feb 22 14:56:56 2007
@@ -837,9 +837,8 @@
#if defined(ZTS) && defined(HAVE_GETGRNAM_R) &&
defined(_SC_GETGR_R_SIZE_MAX)
buflen = sysconf(_SC_GETGR_R_SIZE_MAX);
- if (buflen < 1) {
- RETURN_FALSE;
- }
+ if (buflen < 0)
+ buflen = 1024;
buf = emalloc(buflen);
g = &gbuf;
@@ -887,6 +886,8 @@
#ifdef HAVE_GETGRGID_R
grbuflen = sysconf(_SC_GETGR_R_SIZE_MAX);
+ if (grbuflen < 0)
+ grbuflen = 1024;
grbuf = emalloc(grbuflen);
ret = getgrgid_r(gid, &_g, grbuf, grbuflen, &retgrptr);
@@ -950,9 +951,9 @@
#if defined(ZTS) && defined(_SC_GETPW_R_SIZE_MAX) &&
defined(HAVE_GETPWNAM_R)
buflen = sysconf(_SC_GETPW_R_SIZE_MAX);
- if (buflen < 1) {
- RETURN_FALSE;
- }
+ if (buflen < 0)
+ buflen = 1024;
+
buf = emalloc(buflen);
pw = &pwbuf;
@@ -999,9 +1000,8 @@
}
#if defined(ZTS) && defined(_SC_GETPW_R_SIZE_MAX) &&
defined(HAVE_GETPWUID_R)
pwbuflen = sysconf(_SC_GETPW_R_SIZE_MAX);
- if (pwbuflen < 1) {
- RETURN_FALSE;
- }
+ if (pwbuflen < 0)
+ pwbuflen = 1024;
pwbuf = emalloc(pwbuflen);
ret = getpwuid_r(uid, &_pw, pwbuf, pwbuflen, &retpwptr);
--------------------------------------------------------------
Previous Comments:
------------------------------------------------------------------------
[2007-02-22 23:32:39] stas at FreeBSD dot org
Description:
------------
This module has problems with functions like getgrgid_r etc. It tries
to find out limits using sysconf, but FreeBSD doesn't have, e.g.
_SC_GETPW_R_SIZE_MAX. Since it does't try to check the return value it
effectively leads to attempt to allocate (size_t)-1 bytes, which
obviously fails, since trying to allocate (size_t)-1 bytes exceeds any
limits.
Reproduce code:
---------------
$groupinfo = posix_getgrgid(0);
print_r($groupinfo);
Expected result:
----------------
something meaningful
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=40600&edit=1