mirror of
https://github.com/discourse/discourse.git
synced 2025-03-24 21:55:38 +08:00
FIX: Ensure poll extraction is not attempted if post body is absent (#19718)
Since the poll post handler runs very early in the post creation process, it's possible to run the handler on an obiviously invalid post. This change ensures the post's `raw` value is present before proceeding.
This commit is contained in:
parent
73ec80893d
commit
55bdab2b3b
@ -306,6 +306,10 @@ class DiscoursePoll::Poll
|
|||||||
end
|
end
|
||||||
|
|
||||||
def self.extract(raw, topic_id, user_id = nil)
|
def self.extract(raw, topic_id, user_id = nil)
|
||||||
|
# Poll Post handlers get called very early in the post
|
||||||
|
# creation process. `raw` could be nil here.
|
||||||
|
return [] if raw.blank?
|
||||||
|
|
||||||
# TODO: we should fix the callback mess so that the cooked version is available
|
# TODO: we should fix the callback mess so that the cooked version is available
|
||||||
# in the validators instead of cooking twice
|
# in the validators instead of cooking twice
|
||||||
raw = raw.sub(%r{\[quote.+/quote\]}m, "")
|
raw = raw.sub(%r{\[quote.+/quote\]}m, "")
|
||||||
|
26
plugins/poll/spec/requests/posts_controller_spec.rb
Normal file
26
plugins/poll/spec/requests/posts_controller_spec.rb
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "rails_helper"
|
||||||
|
|
||||||
|
RSpec.describe PostsController do
|
||||||
|
let(:admin) { Fabricate(:admin) }
|
||||||
|
|
||||||
|
describe "#create" do
|
||||||
|
it "fails gracefully without a post body" do
|
||||||
|
key = Fabricate(:api_key).key
|
||||||
|
|
||||||
|
expect do
|
||||||
|
post "/posts.json",
|
||||||
|
params: {
|
||||||
|
title: "this is test body",
|
||||||
|
},
|
||||||
|
headers: {
|
||||||
|
HTTP_API_USERNAME: admin.username,
|
||||||
|
HTTP_API_KEY: key,
|
||||||
|
}
|
||||||
|
end.not_to change { Topic.count }
|
||||||
|
|
||||||
|
expect(response.status).to eq(422)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
x
Reference in New Issue
Block a user