FIX: Ensure poll extraction is not attempted if post body is absent ()

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:
Selase Krakani 2023-01-13 01:47:44 +00:00 committed by GitHub
parent 73ec80893d
commit 55bdab2b3b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 0 deletions
plugins/poll

@ -306,6 +306,10 @@ class DiscoursePoll::Poll
end
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
# in the validators instead of cooking twice
raw = raw.sub(%r{\[quote.+/quote\]}m, "")

@ -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