Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
ruby
提交
e91c39f1
R
ruby
项目概览
张重言
/
ruby
通知
3
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
ruby
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e91c39f1
编写于
1月 17, 2020
作者:
J
Jeremy Evans
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Remove special handling of $SAFE and related C-APIs
These were all deprecated in Ruby 2.7.
上级
461db352
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
2 addition
and
229 deletion
+2
-229
NEWS.md
NEWS.md
+2
-0
bootstraptest/test_proc.rb
bootstraptest/test_proc.rb
+0
-13
common.mk
common.mk
+0
-34
include/ruby/ruby.h
include/ruby/ruby.h
+0
-36
inits.c
inits.c
+0
-1
safe.c
safe.c
+0
-145
未找到文件。
NEWS.md
浏览文件 @
e91c39f1
...
...
@@ -10,6 +10,8 @@ sufficient information, see the ChangeLog file or Redmine
## Language changes
*
$SAFE is now a normal global variable with no special behavior. [Feature #16131]
## Command line options
## Core classes updates (outstanding ones only)
...
...
bootstraptest/test_proc.rb
浏览文件 @
e91c39f1
...
...
@@ -224,19 +224,6 @@ def m(&b)
Proc.new{|a, *b| [a, b]}.call(1, 2, 3),
]
}
assert_equal
%q{1}
,
%q{
pr = proc{
$SAFE
}
$SAFE = 1
pr.call
}
assert_equal
%q{[1, 1]}
,
%q{
pr = proc{
$SAFE += 1
}
[pr.call, $SAFE]
}
assert_equal
%q{1}
,
%q{
def m(&b)
b
...
...
common.mk
浏览文件 @
e91c39f1
...
...
@@ -127,7 +127,6 @@ COMMONOBJS = array.$(OBJEXT) \
regparse.
$(OBJEXT)
\
regsyntax.
$(OBJEXT)
\
ruby.
$(OBJEXT)
\
safe.
$(OBJEXT)
\
signal.
$(OBJEXT)
\
sprintf.
$(OBJEXT)
\
st.
$(OBJEXT)
\
...
...
@@ -3570,39 +3569,6 @@ ruby.$(OBJEXT): {$(VPATH)}thread_native.h
ruby.$(OBJEXT)
:
{$(VPATH)}util.h
ruby.$(OBJEXT)
:
{$(VPATH)}vm_core.h
ruby.$(OBJEXT)
:
{$(VPATH)}vm_opts.h
safe.$(OBJEXT)
:
$(CCAN_DIR)/check_type/check_type.h
safe.$(OBJEXT)
:
$(CCAN_DIR)/container_of/container_of.h
safe.$(OBJEXT)
:
$(CCAN_DIR)/list/list.h
safe.$(OBJEXT)
:
$(CCAN_DIR)/str/str.h
safe.$(OBJEXT)
:
$(hdrdir)/ruby.h
safe.$(OBJEXT)
:
$(hdrdir)/ruby/ruby.h
safe.$(OBJEXT)
:
$(top_srcdir)/internal/array.h
safe.$(OBJEXT)
:
$(top_srcdir)/internal/compilers.h
safe.$(OBJEXT)
:
$(top_srcdir)/internal/gc.h
safe.$(OBJEXT)
:
$(top_srcdir)/internal/imemo.h
safe.$(OBJEXT)
:
$(top_srcdir)/internal/serial.h
safe.$(OBJEXT)
:
$(top_srcdir)/internal/static_assert.h
safe.$(OBJEXT)
:
$(top_srcdir)/internal/stdbool.h
safe.$(OBJEXT)
:
$(top_srcdir)/internal/vm.h
safe.$(OBJEXT)
:
$(top_srcdir)/internal/warnings.h
safe.$(OBJEXT)
:
{$(VPATH)}assert.h
safe.$(OBJEXT)
:
{$(VPATH)}config.h
safe.$(OBJEXT)
:
{$(VPATH)}defines.h
safe.$(OBJEXT)
:
{$(VPATH)}id.h
safe.$(OBJEXT)
:
{$(VPATH)}intern.h
safe.$(OBJEXT)
:
{$(VPATH)}internal.h
safe.$(OBJEXT)
:
{$(VPATH)}method.h
safe.$(OBJEXT)
:
{$(VPATH)}missing.h
safe.$(OBJEXT)
:
{$(VPATH)}node.h
safe.$(OBJEXT)
:
{$(VPATH)}ruby_assert.h
safe.$(OBJEXT)
:
{$(VPATH)}ruby_atomic.h
safe.$(OBJEXT)
:
{$(VPATH)}safe.c
safe.$(OBJEXT)
:
{$(VPATH)}st.h
safe.$(OBJEXT)
:
{$(VPATH)}subst.h
safe.$(OBJEXT)
:
{$(VPATH)}thread_$(THREAD_MODEL).h
safe.$(OBJEXT)
:
{$(VPATH)}thread_native.h
safe.$(OBJEXT)
:
{$(VPATH)}vm_core.h
safe.$(OBJEXT)
:
{$(VPATH)}vm_opts.h
setproctitle.$(OBJEXT)
:
$(hdrdir)/ruby.h
setproctitle.$(OBJEXT)
:
$(hdrdir)/ruby/ruby.h
setproctitle.$(OBJEXT)
:
{$(VPATH)}assert.h
...
...
include/ruby/ruby.h
浏览文件 @
e91c39f1
...
...
@@ -626,42 +626,6 @@ VALUE rb_get_path(VALUE);
VALUE
rb_get_path_no_checksafe
(
VALUE
);
#define FilePathStringValue(v) ((v) = rb_get_path(v))
/* Remove in 3.0 */
#define RUBY_SAFE_LEVEL_MAX 1
void
rb_secure
(
int
);
int
rb_safe_level
(
void
);
void
rb_set_safe_level
(
int
);
#if GCC_VERSION_SINCE(4,4,0)
int
ruby_safe_level_2_error
(
void
)
__attribute__
((
error
(
"$SAFE=2 to 4 are obsolete"
)));
int
ruby_safe_level_2_warning
(
void
)
__attribute__
((
const
,
warning
(
"$SAFE=2 to 4 are obsolete"
)));
# ifdef RUBY_EXPORT
# define ruby_safe_level_2_warning() ruby_safe_level_2_error()
# endif
# if defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P)
# define RUBY_SAFE_LEVEL_INVALID_P(level) \
__extension__(\
__builtin_choose_expr(\
__builtin_constant_p(level), \
((level) < 0 || RUBY_SAFE_LEVEL_MAX < (level)), 0))
# define RUBY_SAFE_LEVEL_CHECK(level, type) \
__extension__(__builtin_choose_expr(RUBY_SAFE_LEVEL_INVALID_P(level), ruby_safe_level_2_##type(), (level)))
# else
/* in gcc 4.8 or earlier, __builtin_choose_expr() does not consider
* __builtin_constant_p(variable) a constant expression.
*/
# define RUBY_SAFE_LEVEL_INVALID_P(level) \
__extension__(__builtin_constant_p(level) && \
((level) < 0 || RUBY_SAFE_LEVEL_MAX < (level)))
# define RUBY_SAFE_LEVEL_CHECK(level, type) \
(RUBY_SAFE_LEVEL_INVALID_P(level) ? ruby_safe_level_2_##type() : (level))
# endif
# define rb_secure(level) rb_secure(RUBY_SAFE_LEVEL_CHECK(level, warning))
# define rb_set_safe_level(level) rb_set_safe_level(RUBY_SAFE_LEVEL_CHECK(level, error))
#endif
void
rb_set_safe_level_force
(
int
);
void
rb_secure_update
(
VALUE
);
NORETURN
(
void
rb_insecure_operation
(
void
));
VALUE
rb_errinfo
(
void
);
void
rb_set_errinfo
(
VALUE
);
...
...
inits.c
浏览文件 @
e91c39f1
...
...
@@ -37,7 +37,6 @@ rb_call_inits(void)
CALL
(
String
);
CALL
(
Exception
);
CALL
(
eval
);
CALL
(
safe
);
CALL
(
jump
);
CALL
(
Numeric
);
CALL
(
Bignum
);
...
...
safe.c
已删除
100644 → 0
浏览文件 @
461db352
/**********************************************************************
safe.c -
$Author$
created at: Tue Sep 23 09:44:32 JST 2008
Copyright (C) 2008 Yukihiro Matsumoto
**********************************************************************/
#define SAFE_LEVEL_MAX RUBY_SAFE_LEVEL_MAX
#include "ruby/ruby.h"
#include "vm_core.h"
/* $SAFE accessor */
#undef rb_secure
#undef rb_set_safe_level
#undef ruby_safe_level_2_warning
int
ruby_safe_level_2_warning
(
void
)
{
rb_warn
(
"rb_safe_level_2_warning will be removed in Ruby 3.0"
);
return
2
;
}
int
rb_safe_level
(
void
)
{
rb_warn
(
"rb_safe_level will be removed in Ruby 3.0"
);
return
GET_VM
()
->
safe_level_
;
}
void
rb_set_safe_level_force
(
int
safe
)
{
rb_warn
(
"rb_set_safe_level_force will be removed in Ruby 3.0"
);
GET_VM
()
->
safe_level_
=
safe
;
}
void
rb_set_safe_level
(
int
level
)
{
rb_vm_t
*
vm
=
GET_VM
();
rb_warn
(
"rb_set_safe_level will be removed in Ruby 3.0"
);
if
(
level
>
SAFE_LEVEL_MAX
)
{
rb_raise
(
rb_eArgError
,
"$SAFE=2 to 4 are obsolete"
);
}
else
if
(
level
<
0
)
{
rb_raise
(
rb_eArgError
,
"$SAFE should be >= 0"
);
}
else
{
int
line
;
const
char
*
path
=
rb_source_location_cstr
(
&
line
);
if
(
0
)
fprintf
(
stderr
,
"%s:%d $SAFE %d -> %d
\n
"
,
path
?
path
:
"-"
,
line
,
vm
->
safe_level_
,
level
);
vm
->
safe_level_
=
level
;
}
}
static
VALUE
safe_getter
(
ID
_x
,
VALUE
*
_y
)
{
rb_warn
(
"$SAFE will become a normal global variable in Ruby 3.0"
);
return
INT2NUM
(
GET_VM
()
->
safe_level_
);
}
static
void
safe_setter
(
VALUE
val
,
ID
_x
,
VALUE
*
_y
)
{
int
level
=
NUM2INT
(
val
);
rb_vm_t
*
vm
=
GET_VM
();
rb_warn
(
"$SAFE will become a normal global variable in Ruby 3.0"
);
if
(
level
>
SAFE_LEVEL_MAX
)
{
rb_raise
(
rb_eArgError
,
"$SAFE=2 to 4 are obsolete"
);
}
else
if
(
level
<
0
)
{
rb_raise
(
rb_eArgError
,
"$SAFE should be >= 0"
);
}
else
{
int
line
;
const
char
*
path
=
rb_source_location_cstr
(
&
line
);
if
(
0
)
fprintf
(
stderr
,
"%s:%d $SAFE %d -> %d
\n
"
,
path
?
path
:
"-"
,
line
,
vm
->
safe_level_
,
level
);
vm
->
safe_level_
=
level
;
}
}
void
rb_secure
(
int
level
)
{
rb_warn
(
"rb_secure will be removed in Ruby 3.0"
);
if
(
level
<=
GET_VM
()
->
safe_level_
)
{
ID
caller_name
=
rb_frame_callee
();
if
(
caller_name
)
{
rb_raise
(
rb_eSecurityError
,
"Insecure operation `%"
PRIsVALUE
"' at level %d"
,
rb_id2str
(
caller_name
),
GET_VM
()
->
safe_level_
);
}
else
{
rb_raise
(
rb_eSecurityError
,
"Insecure operation at level %d"
,
GET_VM
()
->
safe_level_
);
}
}
}
void
rb_secure_update
(
VALUE
obj
)
{
rb_warn
(
"rb_secure_update will be removed in Ruby 3.0"
);
}
void
rb_insecure_operation
(
void
)
{
rb_warn
(
"rb_insecure_operation will be removed in Ruby 3.0"
);
ID
caller_name
=
rb_frame_callee
();
if
(
caller_name
)
{
rb_raise
(
rb_eSecurityError
,
"Insecure operation - %"
PRIsVALUE
,
rb_id2str
(
caller_name
));
}
else
{
rb_raise
(
rb_eSecurityError
,
"Insecure operation: -r"
);
}
}
void
rb_check_safe_obj
(
VALUE
x
)
{
rb_warn
(
"rb_check_safe_obj will be removed in Ruby 3.0"
);
}
void
Init_safe
(
void
)
{
rb_define_virtual_variable
(
"$SAFE"
,
safe_getter
,
safe_setter
);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录