[ruby-dev:50287] [Ruby trunk Bug#13995] Process.initgroups がNUL終端文字列を期待している
From:
tommy@...
Date:
2017-10-10 15:26:20 UTC
List:
ruby-dev #50287
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/