From 9a4e2e39a8622bef86e20c34b3936d560e00ae3a Mon Sep 17 00:00:00 2001 From: rick Date: Wed, 12 Jan 2011 15:00:58 -0800 Subject: [PATCH] update albino to 1.2.3, handle bad code blocks gracefully --- gollum.gemspec | 2 +- lib/gollum/albino.rb | 22 ++-------------------- lib/gollum/markup.rb | 12 ++++++++---- test/test_markup.rb | 10 +++++----- 4 files changed, 16 insertions(+), 30 deletions(-) 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
\n
\n\n

b

" + "1\n\n\n\n\n

b

" 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
\n
\n\n

b

" + "1\n\n\n\n\n

b

" 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
\n
\n\n

b

" + " 2\n\n\n\n\n

b

" compare(content, output) end @@ -383,13 +383,13 @@ context "Markup" do output = "

a

\n\n
" +
              "x = 1" +
              "\n\ny =" +
-             " 2\n
\n
\n\n

b

" + " 2\n\n\n\n\n

b

" 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\n

b

" + output = "

a

\n\n
booya\nboom
\n\n

b

" compare(content, output) end