From: tommy@... Date: 2017-10-10T15:26:20+00:00 Subject: [ruby-dev:50287] [Ruby trunk Bug#13995] Process.initgroups がNUL終端文字列を期待している Issue #13995 has been reported by tommy (Masahiro Tomita). ---------------------------------------- Bug #13995: Process.initgroups がNUL終端文字列を期待している https://bugs.ruby-lang.org/issues/13995 * Author: tommy (Masahiro Tomita) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.5.0dev (2017-10-10 trunk 60154) [x86_64-linux] * Backport: 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- Process.initgroups がNUL終端文字列を期待していて、SHARABLE_MIDDLE_SUBSTRING=1 時におかしくなります。 こんなに長いユーザー名は実際には使われないと思うので実害はないかもしれません。 ``` # grep abcdefg /etc/group test:x:999:abcdefghijklmnopqrstuvwxyz # ruby -e 'p Process.initgroups("abcdefghijklmnopqrstuvwxyz!".chop, 123)' [123] ``` パッチ適用後は正しく動きます。 ``` # ruby -e 'p Process.initgroups("abcdefghijklmnopqrstuvwxyz!".chop, 123)' [123, 999] ``` パッチ: ```diff diff --git a/process.c b/process.c index 2d842176bd..97ba885fca 100644 --- a/process.c +++ b/process.c @@ -5948,7 +5948,7 @@ proc_setgroups(VALUE obj, VALUE ary) static VALUE proc_initgroups(VALUE obj, VALUE uname, VALUE base_grp) { - if (initgroups(StringValuePtr(uname), OBJ2GID(base_grp)) != 0) { + if (initgroups(StringValueCStr(uname), OBJ2GID(base_grp)) != 0) { rb_sys_fail(0); } return proc_getgroups(obj); ``` -- https://bugs.ruby-lang.org/