From 23376cb6913caca4c36db77cecfe8d24cd92946f Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 4 Dec 2024 08:41:21 +0100 Subject: [PATCH] Fix `NameError` in status update processing (#33161) --- app/services/activitypub/process_status_update_service.rb | 2 +- .../activitypub/process_status_update_service_spec.rb | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb index e2b752227d..32f563013b 100644 --- a/app/services/activitypub/process_status_update_service.rb +++ b/app/services/activitypub/process_status_update_service.rb @@ -204,7 +204,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService mention ||= account.mentions.new(status: @status) current_mentions << mention - rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS + rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError # Since previous mentions are about already-known accounts, # they don't try to resolve again and won't fall into this case. # In other words, this failure case is only for new mentions and won't diff --git a/spec/services/activitypub/process_status_update_service_spec.rb b/spec/services/activitypub/process_status_update_service_spec.rb index b6ceba374f..498b3c8aa0 100644 --- a/spec/services/activitypub/process_status_update_service_spec.rb +++ b/spec/services/activitypub/process_status_update_service_spec.rb @@ -6,6 +6,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do subject { described_class.new } let!(:status) { Fabricate(:status, text: 'Hello world', account: Fabricate(:account, domain: 'example.com')) } + let(:bogus_mention) { 'https://example.com/users/erroringuser' } let(:payload) do { '@context': 'https://www.w3.org/ns/activitystreams', @@ -17,6 +18,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do tag: [ { type: 'Hashtag', name: 'hoge' }, { type: 'Mention', href: ActivityPub::TagManager.instance.uri_for(alice) }, + { type: 'Mention', href: bogus_mention }, ], } end @@ -33,16 +35,18 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do mentions.each { |a| Fabricate(:mention, status: status, account: a) } tags.each { |t| status.tags << t } media_attachments.each { |m| status.media_attachments << m } + stub_request(:get, bogus_mention).to_raise(HTTP::ConnectionError) end describe '#call' do - it 'updates text and content warning' do + it 'updates text and content warning, and schedules re-fetching broken mention' do subject.call(status, json, json) expect(status.reload) .to have_attributes( text: eq('Hello universe'), spoiler_text: eq('Show more') ) + expect(MentionResolveWorker).to have_enqueued_sidekiq_job(status.id, bogus_mention, anything) end context 'when the changes are only in sanitized-out HTML' do