зеркало из https://github.com/github/ruby.git
uid_t and gid_t are narrower than VALUE.
Often uid / gid are 16 bit or 32 bit integers, while VALUE are 32 to 64 bits. They tend to differ in size. Because rb_ensure expects its callbacks to take VALUE arguments, narrowing must be done by hand, otherwise data corruption can happen depending on machine ABI.
This commit is contained in:
Родитель
48131a4673
Коммит
5e86b005c0
|
@ -7133,8 +7133,9 @@ p_uid_have_saved_id(void)
|
|||
|
||||
#if defined(HAVE_SETRESUID) || defined(HAVE_SETEUID) || defined(_POSIX_SAVED_IDS)
|
||||
static VALUE
|
||||
p_uid_sw_ensure(rb_uid_t id)
|
||||
p_uid_sw_ensure(VALUE i)
|
||||
{
|
||||
rb_uid_t id = (rb_uid_t/* narrowing */)i;
|
||||
under_uid_switch = 0;
|
||||
id = rb_seteuid_core(id);
|
||||
return UIDT2NUM(id);
|
||||
|
@ -7246,8 +7247,9 @@ p_gid_have_saved_id(void)
|
|||
|
||||
#if defined(HAVE_SETRESGID) || defined(HAVE_SETEGID) || defined(_POSIX_SAVED_IDS)
|
||||
static VALUE
|
||||
p_gid_sw_ensure(rb_gid_t id)
|
||||
p_gid_sw_ensure(VALUE i)
|
||||
{
|
||||
rb_gid_t id = (rb_gid_t/* narrowing */)i;
|
||||
under_gid_switch = 0;
|
||||
id = rb_setegid_core(id);
|
||||
return GIDT2NUM(id);
|
||||
|
|
Загрузка…
Ссылка в новой задаче