Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
Brakeman
提交
93fc57f2
B
Brakeman
项目概览
李少辉-开发者
/
Brakeman
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
B
Brakeman
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
93fc57f2
编写于
2月 08, 2012
作者:
J
Justin Collins
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Better method for avoiding substitution explosions
上级
c40541c4
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
23 addition
and
21 deletion
+23
-21
lib/brakeman/processors/alias_processor.rb
lib/brakeman/processors/alias_processor.rb
+23
-21
未找到文件。
lib/brakeman/processors/alias_processor.rb
浏览文件 @
93fc57f2
...
...
@@ -27,6 +27,7 @@ class Brakeman::AliasProcessor < SexpProcessor
@env
=
SexpProcessor
::
Environment
.
new
@inside_if
=
false
@ignore_ifs
=
false
@exp_context
=
[]
@tracker
=
tracker
#set in subclass as necessary
set_env_defaults
end
...
...
@@ -71,9 +72,12 @@ class Brakeman::AliasProcessor < SexpProcessor
#Process a Sexp. If the Sexp has a value associated with it in the
#environment, that value will be returned.
def
process_default
exp
@exp_context
.
push
exp
begin
type
=
exp
.
shift
exp
.
each_with_index
do
|
e
,
i
|
next
if
i
==
0
if
sexp?
e
and
not
e
.
empty?
exp
[
i
]
=
process
e
else
...
...
@@ -82,18 +86,18 @@ class Brakeman::AliasProcessor < SexpProcessor
end
rescue
Exception
=>
err
@tracker
.
error
err
if
@tracker
ensure
#The type must be put back on, or else later processing
#will trip up on it
exp
.
unshift
type
end
#Generic replace
if
replacement
=
env
[
exp
]
and
not
sexp_includes?
(
replacement
,
exp
)
set_line
replacement
.
deep_clone
,
exp
.
line
if
replacement
=
env
[
exp
]
and
not
duplicate?
replacement
result
=
set_line
replacement
.
deep_clone
,
exp
.
line
else
exp
result
=
exp
end
@exp_context
.
pop
result
end
#Process a method call.
...
...
@@ -102,7 +106,9 @@ class Brakeman::AliasProcessor < SexpProcessor
exp
=
process_default
exp
#In case it is replaced with something else
return
exp
unless
call?
exp
unless
call?
exp
return
exp
end
target
=
exp
[
1
]
method
=
exp
[
2
]
...
...
@@ -477,7 +483,11 @@ class Brakeman::AliasProcessor < SexpProcessor
def
join_strings
string1
,
string2
result
=
Sexp
.
new
(
:str
)
result
[
1
]
=
string1
[
1
]
+
string2
[
1
]
result
if
result
[
1
].
length
>
50
string1
else
result
end
end
#Returns a new SexpProcessor::Environment containing only instance variables.
...
...
@@ -514,17 +524,9 @@ class Brakeman::AliasProcessor < SexpProcessor
end
end
def
sexp_includes?
exp
,
search_term
search_queue
=
[
exp
]
until
search_queue
.
empty?
node
=
search_queue
.
shift
if
node
==
search_term
return
true
elsif
sexp?
node
search_queue
.
concat
node
end
def
duplicate?
exp
@exp_context
[
0
..-
2
].
reverse_each
do
|
e
|
return
true
if
exp
==
e
end
false
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录