[ruby-dev:50457] [Ruby trunk Bug#13954] Etc.getpwnam, getgrnam が SHARABLE_MIDDLE_SUBSTRING=1 を考慮していない
From:
usa@...
Date:
2018-01-31 13:39:22 UTC
List:
ruby-dev #50457
Issue #13954 has been updated by usa (Usaku NAKAMURA).
Backport changed from 2.3: REQUIRED, 2.4: DONE to 2.3: DONE, 2.4: DONE
ruby_2_3 r62140 merged revision(s) 60071.
----------------------------------------
Bug #13954: Etc.getpwnam, getgrnam =E3=81=8C SHARABLE_MIDDLE_SUBSTRING=3D1 =
=E3=82=92=E8=80=83=E6=85=AE=E3=81=97=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84
https://bugs.ruby-lang.org/issues/13954#change-70086
* Author: tommy (Masahiro Tomita)
* Status: Closed
* Priority: Normal
* Assignee:=20
* Target version:=20
* ruby -v: ruby 2.5.0dev (2017-09-29 trunk 60062) [x86_64-linux]
* Backport: 2.3: DONE, 2.4: DONE
----------------------------------------
SHARABLE_MIDDLE_SUBSTRING=3D1 =E3=81=A7=E3=82=B3=E3=83=B3=E3=83=91=E3=82=A4=
=E3=83=AB=E3=81=97=E3=81=9FRuby=E3=81=A7 Etc.getpwnam, getgrnam =E3=81=8C=
=E5=85=B1=E6=9C=89=E5=85=83=E3=81=AE=E6=96=87=E5=AD=97=E5=88=97=E7=B5=82=E7=
=AB=AF=E3=81=BE=E3=81=A7=E4=BD=BF=E7=94=A8=E3=81=97=E3=81=A6=E3=81=97=E3=81=
=BE=E3=81=84=E3=81=BE=E3=81=99=E3=80=82
```
% sudo useradd abcdefghijklmnopqrstuvwxyz
% ruby -retc -e 'p Etc.getpwnam("abcdefghijklmnopqrstuvwxyz")'=20=20=20=20=
=20=20=20=20=20=20=20
#<struct Etc::Passwd name=3D"abcdefghijklmnopqrstuvwxyz", passwd=3D"x", uid=
=3D1002, gid=3D1002, gecos=3D"", dir=3D"/home/abcdefghijklmnopqrstuvwxyz", =
shell=3D"">
% ruby -retc -e 'p Etc.getpwnam(("abcdefghijklmnopqrstuvwxyz"*10)[0,26])'
Traceback (most recent call last):
1: from -e:1:in `<main>'
-e:1:in `getpwnam': can't find user for abcdefghijklmnopqrstuvwxyz (Argumen=
tError)
```
=E6=AC=A1=E3=81=AE=E3=83=91=E3=83=83=E3=83=81=E3=81=A7=E7=9B=B4=E3=82=8B=E3=
=81=A8=E6=80=9D=E3=81=84=E3=81=BE=E3=81=99=E3=80=82
```diff
diff --git a/ext/etc/etc.c b/ext/etc/etc.c
index 5d964ba518..66fd26f436 100644
--- a/ext/etc/etc.c
+++ b/ext/etc/etc.c
@@ -217,6 +217,7 @@ etc_getpwnam(VALUE obj, VALUE nam)
struct passwd *pwd;
=20
SafeStringValue(nam);
+ StringValueCStr(nam);
pwd =3D getpwnam(RSTRING_PTR(nam));
if (pwd =3D=3D 0) rb_raise(rb_eArgError, "can't find user for %"PRIsVA=
LUE, nam);
return setup_passwd(pwd);
@@ -460,6 +461,7 @@ etc_getgrnam(VALUE obj, VALUE nam)
struct group *grp;
=20
SafeStringValue(nam);
+ StringValueCStr(nam);
grp =3D getgrnam(RSTRING_PTR(nam));
if (grp =3D=3D 0) rb_raise(rb_eArgError, "can't find group for %"PRIsV=
ALUE, nam);
return setup_group(grp);
```
--=20
https://bugs.ruby-lang.org/