Fix crash when processing Flag activity with no status (#26189)
This commit is contained in:
		
							parent
							
								
									b4e739ff0f
								
							
						
					
					
						commit
						6c3c5bbbc3
					
				| @ -9,7 +9,7 @@ class ActivityPub::Activity::Flag < ActivityPub::Activity | |||||||
| 
 | 
 | ||||||
|     target_accounts.each do |target_account| |     target_accounts.each do |target_account| | ||||||
|       target_statuses     = target_statuses_by_account[target_account.id] |       target_statuses     = target_statuses_by_account[target_account.id] | ||||||
|       replied_to_accounts = Account.local.where(id: target_statuses.filter_map(&:in_reply_to_account_id)) |       replied_to_accounts = target_statuses.nil? ? [] : Account.local.where(id: target_statuses.filter_map(&:in_reply_to_account_id)) | ||||||
| 
 | 
 | ||||||
|       next if target_account.suspended? || (!target_account.local? && replied_to_accounts.none?) |       next if target_account.suspended? || (!target_account.local? && replied_to_accounts.none?) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -139,6 +139,35 @@ RSpec.describe ActivityPub::Activity::Flag do | |||||||
|         expect(report.status_ids).to eq [] |         expect(report.status_ids).to eq [] | ||||||
|       end |       end | ||||||
|     end |     end | ||||||
|  | 
 | ||||||
|  |     context 'when an account is passed but no status' do | ||||||
|  |       let(:mentioned) { Fabricate(:account) } | ||||||
|  | 
 | ||||||
|  |       let(:json) do | ||||||
|  |         { | ||||||
|  |           '@context': 'https://www.w3.org/ns/activitystreams', | ||||||
|  |           id: flag_id, | ||||||
|  |           type: 'Flag', | ||||||
|  |           content: 'Boo!!', | ||||||
|  |           actor: ActivityPub::TagManager.instance.uri_for(sender), | ||||||
|  |           object: [ | ||||||
|  |             ActivityPub::TagManager.instance.uri_for(flagged), | ||||||
|  |           ], | ||||||
|  |         }.with_indifferent_access | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|  |       before do | ||||||
|  |         subject.perform | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|  |       it 'creates a report with no attached status' do | ||||||
|  |         report = Report.find_by(account: sender, target_account: flagged) | ||||||
|  | 
 | ||||||
|  |         expect(report).to_not be_nil | ||||||
|  |         expect(report.comment).to eq 'Boo!!' | ||||||
|  |         expect(report.status_ids).to eq [] | ||||||
|  |       end | ||||||
|  |     end | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   describe '#perform with a defined uri' do |   describe '#perform with a defined uri' do | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user