The code responsible for the exception residents in
gettext/runtime/locale_path.rb line 92 (the relevant function is
``initialize''):
90 Dir.glob(rule %{:lang => "*", :name => name}).each do |path|
91 if /#{this_path_rules}/ =~ path
92 @locale_paths[$1] = path unless @locale_paths[$1]
93 end
94 end
The fix is to change that line to
@locale_paths[$1] = path.untaint unless @locale_paths[$1]
As a temporary solution one can redefine
GetText::LocalePath.initialize or GetText::MOFile.open (the last seems
better for me):
module GetText
class MOFile
alias :oldload :load
def load(arg)
arg = arg.dup.untaint if arg.kind_of? String
oldload(arg)
end
end
end
--
http://375gnu.wordpress.com
--- gettext/lib/gettext/runtime/locale_path.rb~ 2010-05-15 07:55:12.000000000 +0300
+++ gettext/lib/gettext/runtime/locale_path.rb 2011-09-22 20:05:26.000000000 +0300
@@ -89,7 +89,7 @@
this_path_rules = rule % {:lang => "([^\/]+)", :name => name}
Dir.glob(rule %{:lang => "*", :name => name}).each do |path|
if /#{this_path_rules}/ =~ path
- @locale_paths[$1] = path unless @locale_paths[$1]
+ @locale_paths[$1] = path.untaint unless @locale_paths[$1]
end
end
end