diff --git a/gollum.gemspec b/gollum.gemspec index 74ae1c28..73290aca 100644 --- a/gollum.gemspec +++ b/gollum.gemspec @@ -25,7 +25,7 @@ Gem::Specification.new do |s| s.add_dependency('grit', "~> 2.3") s.add_dependency('github-markup', [">= 0.4.0", "< 1.0.0"]) - s.add_dependency('albino', "~> 1.0") + s.add_dependency('albino', "~> 1.2.3") s.add_dependency('sinatra', "~> 1.0") s.add_dependency('mustache', [">= 0.11.2", "< 1.0.0"]) s.add_dependency('sanitize', "~> 1.1") diff --git a/lib/gollum/albino.rb b/lib/gollum/albino.rb index 03725e47..b731ae9d 100644 --- a/lib/gollum/albino.rb +++ b/lib/gollum/albino.rb @@ -1,30 +1,12 @@ require 'albino' class Gollum::Albino < Albino - def self.bin - Albino.bin - end - - def bin - Albino.bin - end + self.bin = ::Albino.bin + self.default_encoding = ::Albino.default_encoding def colorize(options = {}) html = super.to_s html.sub!(%r{\Z}, "\n") html end - - # Hotfix for vulnerable versions of Albino - if !instance_methods.include?('shell_escape') - def convert_options(options = {}) - @options.merge(options).inject('') do |string, (flag, value)| - string + " -#{flag} #{shell_escape value}" - end - end - - def shell_escape(str) - str.to_s.gsub("'", "\\\\'").gsub(";", '\\;') - end - end end \ No newline at end of file diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index 7a521ed8..93909649 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -380,14 +380,18 @@ module Gollum @codemap.each do |id, spec| formatted = spec[:output] || begin code = spec[:code] + lang = spec[:lang] + if code.lines.all? { |line| line =~ /\A\r?\n\Z/ || line =~ /^( |\t)/ } code.gsub!(/^( |\t)/m, '') end - formatted = if lang = spec[:lang] - Gollum::Albino.new(code, lang).colorize - else - "
#{CGI.escapeHTML(code)}"
+
+ formatted = begin
+ lang && Gollum::Albino.colorize(code, lang)
+ rescue ::Albino::ShellArgumentError, ::Albino::Process::TimeoutExceeded,
+ ::Albino::Process::MaximumOutputExceeded
end
+ formatted ||= "#{CGI.escapeHTML(code)}"
update_cache(:code, id, formatted)
formatted
end
diff --git a/test/test_markup.rb b/test/test_markup.rb
index 7d729aba..4ee8bb28 100644
--- a/test/test_markup.rb
+++ b/test/test_markup.rb
@@ -343,7 +343,7 @@ context "Markup" do
content = "a\n\n```ruby\nx = 1\n```\n\nb"
output = "a
\n\n" +
"x = " +
- "1\n\nb
" + "1\n\n\n\n\nb
" index = @wiki.repo.index index.add("Bilbo-Baggins.md", content) @@ -358,7 +358,7 @@ context "Markup" do content = "a\r\n\r\n```ruby\r\nx = 1\r\n```\r\n\r\nb" output = "a
\n\n" +
"x = " +
- "1\n\nb
" + "1\n\n\n\n\nb
" index = @wiki.repo.index index.add("Bilbo-Baggins.md", content) @@ -374,7 +374,7 @@ context "Markup" do output = "a
\n\n" +
"x = 1" +
"\n\ny =" +
- " 2\n\nb
" + " 2\n\n\n\n\nb
" compare(content, output) end @@ -383,13 +383,13 @@ context "Markup" do output = "a
\n\n" +
"x = 1" +
"\n\ny =" +
- " 2\n\nb
" + " 2\n\n\n\n\nb
" compare(content, output) end test "code block with invalid lang" do content = "a\n\n``` ls -al;\n\tbooya\n\tboom\n```\n\nb" - output = "a
\n\n\n\nb
" + output = "a
\n\nbooya\nboom\n\nb
" compare(content, output) end