2013-02-13 58 views
1

使用Rails 3.2.x中和Ruby 1.9.3如何驗證ERB或捕捉ERB的SyntaxError

給定一個惡意形成的ERB模板,我該怎麼辦下列之一:

  • 驗證如果是壞的
  • 捕捉當我試圖得到一個壞的模板的結果是再培訓局拋出的SyntaxError模板,並引發錯誤。

我認爲這會工作:

template = "Hello <%= @planet name %>" 
@planet_name = "Earth" 

begin 
ERB.new(template,nil).result(binding) 
rescue 
Raise StandardError, "Bad Erb template" 
end 

但事實並非如此。相反,我得到ERB一個SyntaxError。

有沒有一種方法來捕捉/驗證這些錯誤?

回答

2

具體救援的SyntaxError原來做的伎倆。

begin 
ERB.new(template,nil).result(binding) 
rescue SyntaxError 
raise StandardError, "Bad Erb template" 
end 
+0

無參數的rescue子句捕獲StandardError,而SyntaxError不是StandardError的子類。 http://www.ruby-doc.org/core-1.9.3/SyntaxError.html – 2013-02-13 15:23:53