Merge pull request #3498 from evazion/fix-3497
Fix #3497: Invalid DText denial of service attack
This commit is contained in:
@@ -51,10 +51,12 @@ module ApplicationHelper
|
|||||||
|
|
||||||
def format_text(text, **options)
|
def format_text(text, **options)
|
||||||
raw DTextRagel.parse(text, **options)
|
raw DTextRagel.parse(text, **options)
|
||||||
|
rescue DTextRagel::Error => e
|
||||||
|
raw ""
|
||||||
end
|
end
|
||||||
|
|
||||||
def strip_dtext(text)
|
def strip_dtext(text)
|
||||||
raw(DTextRagel.parse_strip(text))
|
format_text(text, strip: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
def error_messages_for(instance_name)
|
def error_messages_for(instance_name)
|
||||||
|
|||||||
@@ -9,10 +9,6 @@ class WikiPagePresenter
|
|||||||
wiki_page.body
|
wiki_page.body
|
||||||
end
|
end
|
||||||
|
|
||||||
def blurb
|
|
||||||
DTextRagel.parse_strip(excerpt.to_s)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Produce a formatted page that shows the difference between two versions of a page.
|
# Produce a formatted page that shows the difference between two versions of a page.
|
||||||
def diff(other_version)
|
def diff(other_version)
|
||||||
pattern = Regexp.new('(?:<.+?>)|(?:[0-9_A-Za-z\x80-\xff]+[\x09\x20]?)|(?:[ \t]+)|(?:\r?\n)|(?:.+?)')
|
pattern = Regexp.new('(?:<.+?>)|(?:[0-9_A-Za-z\x80-\xff]+[\x09\x20]?)|(?:[ \t]+)|(?:\r?\n)|(?:.+?)')
|
||||||
|
|||||||
@@ -72,7 +72,7 @@
|
|||||||
<%= content_tag :link, nil, rel: "prev", href: prev_page_url %>
|
<%= content_tag :link, nil, rel: "prev", href: prev_page_url %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% if @post_set.has_wiki? %>
|
<% if @post_set.has_wiki? %>
|
||||||
<meta name="description" content="<%= @post_set.wiki_page.presenter.blurb %>">
|
<meta name="description" content="<%= strip_dtext(@post_set.wiki_page.presenter.excerpt) %>">
|
||||||
<% else %>
|
<% else %>
|
||||||
<meta name="description" content="<%= Danbooru.config.description %>">
|
<meta name="description" content="<%= Danbooru.config.description %>">
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% content_for(:html_header) do %>
|
<% content_for(:html_header) do %>
|
||||||
<meta name="description" content="<%= @wiki_page.presenter.blurb %>"></meta>
|
<meta name="description" content="<%= strip_dtext(@wiki_page.presenter.excerpt) %>"></meta>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= render "secondary_links" %>
|
<%= render "secondary_links" %>
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
require 'helpers/iqdb_test_helper'
|
|
||||||
|
|
||||||
class IqdbQueriesControllerTest < ActionController::TestCase
|
class IqdbQueriesControllerTest < ActionController::TestCase
|
||||||
include IqdbTestHelper
|
|
||||||
|
|
||||||
context "The iqdb controller" do
|
context "The iqdb controller" do
|
||||||
setup do
|
setup do
|
||||||
@user = FactoryGirl.create(:user)
|
@user = FactoryGirl.create(:user)
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
require 'helpers/pool_archive_test_helper'
|
|
||||||
|
|
||||||
class PoolElementsControllerTest < ActionController::TestCase
|
class PoolElementsControllerTest < ActionController::TestCase
|
||||||
include PoolArchiveTestHelper
|
|
||||||
|
|
||||||
context "The pools posts controller" do
|
context "The pools posts controller" do
|
||||||
setup do
|
setup do
|
||||||
mock_pool_archive_service!
|
mock_pool_archive_service!
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
require 'helpers/pool_archive_test_helper'
|
|
||||||
|
|
||||||
class PoolVersionsControllerTest < ActionController::TestCase
|
class PoolVersionsControllerTest < ActionController::TestCase
|
||||||
include PoolArchiveTestHelper
|
|
||||||
|
|
||||||
context "The pool versions controller" do
|
context "The pool versions controller" do
|
||||||
setup do
|
setup do
|
||||||
mock_pool_archive_service!
|
mock_pool_archive_service!
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
require 'helpers/pool_archive_test_helper'
|
|
||||||
|
|
||||||
class PoolsControllerTest < ActionController::TestCase
|
class PoolsControllerTest < ActionController::TestCase
|
||||||
include PoolArchiveTestHelper
|
|
||||||
|
|
||||||
context "The pools controller" do
|
context "The pools controller" do
|
||||||
setup do
|
setup do
|
||||||
Timecop.travel(1.month.ago) do
|
Timecop.travel(1.month.ago) do
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
require 'helpers/post_archive_test_helper'
|
|
||||||
|
|
||||||
class PostVersionsControllerTest < ActionController::TestCase
|
class PostVersionsControllerTest < ActionController::TestCase
|
||||||
include PostArchiveTestHelper
|
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
super
|
super
|
||||||
|
|
||||||
@user = FactoryGirl.create(:user)
|
@user = FactoryGirl.create(:user)
|
||||||
CurrentUser.user = @user
|
CurrentUser.user = @user
|
||||||
CurrentUser.ip_addr = "127.0.0.1"
|
CurrentUser.ip_addr = "127.0.0.1"
|
||||||
@@ -13,6 +11,7 @@ class PostVersionsControllerTest < ActionController::TestCase
|
|||||||
|
|
||||||
def teardown
|
def teardown
|
||||||
super
|
super
|
||||||
|
|
||||||
CurrentUser.user = nil
|
CurrentUser.user = nil
|
||||||
CurrentUser.ip_addr = nil
|
CurrentUser.ip_addr = nil
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
require 'helpers/post_archive_test_helper'
|
|
||||||
|
|
||||||
class ReportsControllerTest < ActionController::TestCase
|
class ReportsControllerTest < ActionController::TestCase
|
||||||
include PostArchiveTestHelper
|
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
super
|
super
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
require 'helpers/saved_search_test_helper'
|
|
||||||
|
|
||||||
class SavedSearchesControllerTest < ActionController::TestCase
|
class SavedSearchesControllerTest < ActionController::TestCase
|
||||||
include SavedSearchTestHelper
|
|
||||||
|
|
||||||
context "The saved searches controller" do
|
context "The saved searches controller" do
|
||||||
setup do
|
setup do
|
||||||
@user = FactoryGirl.create(:user)
|
@user = FactoryGirl.create(:user)
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
require 'helpers/iqdb_test_helper'
|
|
||||||
|
|
||||||
class UploadsControllerTest < ActionController::TestCase
|
class UploadsControllerTest < ActionController::TestCase
|
||||||
include IqdbTestHelper
|
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
super
|
super
|
||||||
mock_iqdb_service!
|
mock_iqdb_service!
|
||||||
|
|||||||
14
test/helpers/application_helper_test.rb
Normal file
14
test/helpers/application_helper_test.rb
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
require "test_helper"
|
||||||
|
|
||||||
|
class ApplicationHelperTest < ActionView::TestCase
|
||||||
|
context "The application helper" do
|
||||||
|
context "format_text method" do
|
||||||
|
should "not raise an exception for invalid DText" do
|
||||||
|
dtext = "* a\n" * 513
|
||||||
|
|
||||||
|
assert_nothing_raised { format_text(dtext) }
|
||||||
|
assert_equal("", format_text(dtext))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -14,7 +14,7 @@ require 'cache'
|
|||||||
require 'webmock/minitest'
|
require 'webmock/minitest'
|
||||||
|
|
||||||
Dir[File.expand_path(File.dirname(__FILE__) + "/factories/*.rb")].each {|file| require file}
|
Dir[File.expand_path(File.dirname(__FILE__) + "/factories/*.rb")].each {|file| require file}
|
||||||
Dir[File.expand_path(File.dirname(__FILE__) + "/helpers/*.rb")].each {|file| require file}
|
Dir[File.expand_path(File.dirname(__FILE__) + "/test_helpers/*.rb")].each {|file| require file}
|
||||||
|
|
||||||
Shoulda::Matchers.configure do |config|
|
Shoulda::Matchers.configure do |config|
|
||||||
config.integrate do |with|
|
config.integrate do |with|
|
||||||
@@ -24,8 +24,12 @@ end
|
|||||||
|
|
||||||
class ActiveSupport::TestCase
|
class ActiveSupport::TestCase
|
||||||
include PostArchiveTestHelper
|
include PostArchiveTestHelper
|
||||||
|
include PoolArchiveTestHelper
|
||||||
include ReportbooruHelper
|
include ReportbooruHelper
|
||||||
include DownloadTestHelper
|
include DownloadTestHelper
|
||||||
|
include IqdbTestHelper
|
||||||
|
include SavedSearchTestHelper
|
||||||
|
include UploadTestHelper
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
mock_popular_search_service!
|
mock_popular_search_service!
|
||||||
@@ -40,8 +44,6 @@ class ActiveSupport::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
class ActionController::TestCase
|
class ActionController::TestCase
|
||||||
include PostArchiveTestHelper
|
|
||||||
|
|
||||||
def assert_authentication_passes(action, http_method, role, params, session)
|
def assert_authentication_passes(action, http_method, role, params, session)
|
||||||
__send__(http_method, action, params, session.merge(:user_id => @users[role].id))
|
__send__(http_method, action, params, session.merge(:user_id => @users[role].id))
|
||||||
assert_response :success
|
assert_response :success
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
require "test_helper"
|
require "test_helper"
|
||||||
require 'helpers/saved_search_test_helper'
|
|
||||||
|
|
||||||
module Moderator
|
module Moderator
|
||||||
class TagBatchChangeTest < ActiveSupport::TestCase
|
class TagBatchChangeTest < ActiveSupport::TestCase
|
||||||
include SavedSearchTestHelper
|
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
super
|
super
|
||||||
mock_saved_search_service!
|
mock_saved_search_service!
|
||||||
|
|||||||
@@ -1,11 +1,8 @@
|
|||||||
# encoding: utf-8
|
# encoding: utf-8
|
||||||
|
|
||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
require 'helpers/pool_archive_test_helper'
|
|
||||||
|
|
||||||
class PoolTest < ActiveSupport::TestCase
|
class PoolTest < ActiveSupport::TestCase
|
||||||
include PoolArchiveTestHelper
|
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
Timecop.travel(1.month.ago) do
|
Timecop.travel(1.month.ago) do
|
||||||
@user = FactoryGirl.create(:user)
|
@user = FactoryGirl.create(:user)
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
require 'helpers/iqdb_test_helper'
|
|
||||||
|
|
||||||
class PostReplacementTest < ActiveSupport::TestCase
|
class PostReplacementTest < ActiveSupport::TestCase
|
||||||
include IqdbTestHelper
|
|
||||||
|
|
||||||
def upload_file(path, filename, &block)
|
def upload_file(path, filename, &block)
|
||||||
Tempfile.open do |file|
|
Tempfile.open do |file|
|
||||||
file.write(File.read(path))
|
file.write(File.read(path))
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
require 'helpers/pool_archive_test_helper'
|
|
||||||
|
|
||||||
module PostSets
|
module PostSets
|
||||||
class PoolTest < ActiveSupport::TestCase
|
class PoolTest < ActiveSupport::TestCase
|
||||||
include PoolArchiveTestHelper
|
|
||||||
|
|
||||||
context "In all cases" do
|
context "In all cases" do
|
||||||
setup do
|
setup do
|
||||||
@user = FactoryGirl.create(:user)
|
@user = FactoryGirl.create(:user)
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
require 'helpers/pool_archive_test_helper'
|
|
||||||
require 'helpers/saved_search_test_helper'
|
|
||||||
require 'helpers/iqdb_test_helper'
|
|
||||||
|
|
||||||
class PostTest < ActiveSupport::TestCase
|
class PostTest < ActiveSupport::TestCase
|
||||||
include PoolArchiveTestHelper
|
|
||||||
include SavedSearchTestHelper
|
|
||||||
include IqdbTestHelper
|
|
||||||
|
|
||||||
def assert_tag_match(posts, query)
|
def assert_tag_match(posts, query)
|
||||||
assert_equal(posts.map(&:id), Post.tag_match(query).pluck(:id))
|
assert_equal(posts.map(&:id), Post.tag_match(query).pluck(:id))
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
require 'helpers/saved_search_test_helper'
|
|
||||||
|
|
||||||
class SavedSearchTest < ActiveSupport::TestCase
|
class SavedSearchTest < ActiveSupport::TestCase
|
||||||
include SavedSearchTestHelper
|
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
super
|
super
|
||||||
@user = FactoryGirl.create(:user)
|
@user = FactoryGirl.create(:user)
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
require 'helpers/saved_search_test_helper'
|
|
||||||
|
|
||||||
class TagAliasTest < ActiveSupport::TestCase
|
class TagAliasTest < ActiveSupport::TestCase
|
||||||
include SavedSearchTestHelper
|
|
||||||
|
|
||||||
context "A tag alias" do
|
context "A tag alias" do
|
||||||
setup do
|
setup do
|
||||||
Timecop.travel(1.month.ago) do
|
Timecop.travel(1.month.ago) do
|
||||||
|
|||||||
@@ -1,11 +1,6 @@
|
|||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
require 'helpers/iqdb_test_helper'
|
|
||||||
require 'helpers/upload_test_helper'
|
|
||||||
|
|
||||||
class UploadTest < ActiveSupport::TestCase
|
class UploadTest < ActiveSupport::TestCase
|
||||||
include IqdbTestHelper
|
|
||||||
include UploadTestHelper
|
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
super
|
super
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user