summaryrefslogtreecommitdiff
path: root/include/ruby
diff options
context:
space:
mode:
author卜部昌平 <[email protected]>2021-01-20 10:26:49 +0900
committer卜部昌平 <[email protected]>2021-01-27 09:30:15 +0900
commit0300dec32b5a25b409dc5dfa59b81f4e39fab501 (patch)
tree797898f48eb8c33ca16e33331407c9e71a4e95d3 /include/ruby
parent7ccdad7be83b8bd4fcd09a5bf224d33a64fa1d6f (diff)
kill OBJ_TAINT etc.
Now that RUBY_FL_TAINT is recycled to become new RUBY_FL_SHAREABLE. Setting/clearing this flag from extension libraries break Ractor. Especially problematic one is OBJ_INFECT, which would make non-shareable objects travel across Ractor boundaries. Such operations should just be prohibited.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/4100
Diffstat (limited to 'include/ruby')
-rw-r--r--include/ruby/internal/fl_type.h33
1 files changed, 8 insertions, 25 deletions
diff --git a/include/ruby/internal/fl_type.h b/include/ruby/internal/fl_type.h
index 994003653d..01c1d2b4d5 100644
--- a/include/ruby/internal/fl_type.h
+++ b/include/ruby/internal/fl_type.h
@@ -204,7 +204,7 @@ ruby_fl_type {
RUBY_FL_SINGLETON = RUBY_FL_USER0,
};
-enum { RUBY_FL_DUPPED = RUBY_T_MASK | RUBY_FL_EXIVAR | RUBY_FL_TAINT };
+enum { RUBY_FL_DUPPED = RUBY_T_MASK | RUBY_FL_EXIVAR | RUBY_FL_SHAREABLE };
RBIMPL_SYMBOL_EXPORT_BEGIN()
void rb_obj_infect(VALUE victim, VALUE carrier);
@@ -362,18 +362,7 @@ RBIMPL_ATTR_ARTIFICIAL()
static inline bool
RB_OBJ_TAINTABLE(VALUE obj)
{
- if (! RB_FL_ABLE(obj)) {
- return false;
- }
- else if (RB_TYPE_P(obj, RUBY_T_BIGNUM)) {
- return false;
- }
- else if (RB_TYPE_P(obj, RUBY_T_FLOAT)) {
- return false;
- }
- else {
- return true;
- }
+ return false;
}
RBIMPL_ATTR_PURE_UNLESS_DEBUG()
@@ -381,7 +370,7 @@ RBIMPL_ATTR_ARTIFICIAL()
static inline VALUE
RB_OBJ_TAINTED_RAW(VALUE obj)
{
- return RB_FL_TEST_RAW(obj, RUBY_FL_TAINT);
+ return false;
}
RBIMPL_ATTR_PURE_UNLESS_DEBUG()
@@ -389,41 +378,35 @@ RBIMPL_ATTR_ARTIFICIAL()
static inline bool
RB_OBJ_TAINTED(VALUE obj)
{
- return RB_FL_ANY(obj, RUBY_FL_TAINT);
+ return false;
}
RBIMPL_ATTR_ARTIFICIAL()
static inline void
RB_OBJ_TAINT_RAW(VALUE obj)
{
- RB_FL_SET_RAW(obj, RUBY_FL_TAINT);
+ return;
}
RBIMPL_ATTR_ARTIFICIAL()
static inline void
RB_OBJ_TAINT(VALUE obj)
{
- if (RB_OBJ_TAINTABLE(obj)) {
- RB_OBJ_TAINT_RAW(obj);
- }
+ return;
}
RBIMPL_ATTR_ARTIFICIAL()
static inline void
RB_OBJ_INFECT_RAW(VALUE dst, VALUE src)
{
- RBIMPL_ASSERT_OR_ASSUME(RB_OBJ_TAINTABLE(dst));
- RBIMPL_ASSERT_OR_ASSUME(RB_FL_ABLE(src));
- RB_FL_SET_RAW(dst, RB_OBJ_TAINTED_RAW(src));
+ return;
}
RBIMPL_ATTR_ARTIFICIAL()
static inline void
RB_OBJ_INFECT(VALUE dst, VALUE src)
{
- if (RB_OBJ_TAINTABLE(dst) && RB_FL_ABLE(src)) {
- RB_OBJ_INFECT_RAW(dst, src);
- }
+ return;
}
RBIMPL_ATTR_PURE_UNLESS_DEBUG()