Issue #9600 has been updated by Nobuyoshi Nakada.

Status changed from Open to Closed
% Done changed from 0 to 100

Applied in changeset r45290.

----------
process.c: expand buffer on ERANGE

* process.c (obj2uid, obj2gid): now getpwnam_r() and getgrnam_r()
  may need larger buffers than sysconf values, so retry with
  expanding the buffer when ERANGE is returned.
  [ruby-core:61325] [Bug #9600]

----------------------------------------
Bug #9600: sysconf(_SC_GETGR_R_SIZE_MAX) is just a hint for getgrnam_r()
https://bugs.ruby-lang.org/issues/9600#change-45690

* Author: Rei Odaira
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.2.0dev (2014-03-05) [powerpc64-linux]
* Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
When there is a group that has a lot of members, TestProcess#test_execopts_gid fails.  Following is a more simple example:

    $ ruby -e 'system("true", gid: "largegroup")'
    -e:1:in `system': Numerical result out of range - getgrnam_r (Errno::ERANGE)
    from -e:1:in `<main>'

This wrong exception happens because obj2gid() in process.c calls getgrnam_r() with a buffer that was allocated based on the size returned by sysconf(_SC_GETGR_R_SIZE_MAX). In Linux, sysconf(_SC_GETGR_R_SIZE_MAX) returns 1024, but actually this value is just a hint, so obj2gid() should gradually extend the buffer until getgrnam_r() no longer throws ERANGE.

The same issue was reported in the following page:
http://tomlee.co/2012/10/problems-with-large-linux-unix-groups-and-getgrgid_r-getgrnam_r/



-- 
http://bugs.ruby-lang.org/