diff --git a/lib/jekyll/errors.rb b/lib/jekyll/errors.rb index 01bc99b3..6ae24337 100644 --- a/lib/jekyll/errors.rb +++ b/lib/jekyll/errors.rb @@ -9,8 +9,9 @@ module Jekyll InvalidYAMLFrontMatterError = Class.new(FatalException) MissingDependencyException = Class.new(FatalException) - InvalidDateError = Class.new(FatalException) - InvalidPostNameError = Class.new(FatalException) - PostURLError = Class.new(FatalException) + InvalidDateError = Class.new(FatalException) + InvalidPostNameError = Class.new(FatalException) + PostURLError = Class.new(FatalException) + InvalidURLError = Class.new(FatalException) end end diff --git a/lib/jekyll/url.rb b/lib/jekyll/url.rb index 440deb18..c74e11c8 100644 --- a/lib/jekyll/url.rb +++ b/lib/jekyll/url.rb @@ -35,8 +35,15 @@ module Jekyll # The generated relative URL of the resource # # Returns the String URL + # Raises a Jekyll::Errors::InvalidURLError if the relative URL contains a colon def to_s - sanitize_url(generated_permalink || generated_url) + sanitized_url = sanitize_url(generated_permalink || generated_url) + if sanitized_url.include?(":") + raise Jekyll::Errors::InvalidURLError, + "The URL #{sanitized_url} is invalid because it contains a colon." + else + sanitized_url + end end # Generates a URL from the permalink diff --git a/test/test_url.rb b/test/test_url.rb index fc9a46eb..f5a77622 100644 --- a/test/test_url.rb +++ b/test/test_url.rb @@ -70,5 +70,15 @@ class TestURL < JekyllUnitTest :placeholders => matching_doc.url_placeholders ).to_s end + + should "throw an exception if the URL contains a colon" do + url = URL.new( + :template => "/:x/:y/:z", + :placeholders => { :x => "foo", :z => "bar" } + ) + assert_raises Jekyll::Errors::InvalidURLError do + url.to_s + end + end end end