From 22e2e7f02b2f25f30abd6a616bc3b0b543b30279 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 6 May 2025 11:51:42 +0200 Subject: [PATCH] Fix crash when `likes` or `shares` collections are not inlined, for real (#34619) --- app/lib/activitypub/parser/status_parser.rb | 4 ++-- .../activitypub/parser/status_parser_spec.rb | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/lib/activitypub/parser/status_parser.rb b/app/lib/activitypub/parser/status_parser.rb index d3a421809c..ea779b5cbd 100644 --- a/app/lib/activitypub/parser/status_parser.rb +++ b/app/lib/activitypub/parser/status_parser.rb @@ -95,11 +95,11 @@ class ActivityPub::Parser::StatusParser end def favourites_count - @object.dig('likes', 'totalItems') if @object.is_a?(Hash) + @object['likes']['totalItems'] if @object.is_a?(Hash) && @object['likes'].is_a?(Hash) end def reblogs_count - @object.dig('shares', 'totalItems') if @object.is_a?(Hash) + @object['shares']['totalItems'] if @object.is_a?(Hash) && @object['shares'].is_a?(Hash) end def quote_policy diff --git a/spec/lib/activitypub/parser/status_parser_spec.rb b/spec/lib/activitypub/parser/status_parser_spec.rb index 914dce9888..b251b63f43 100644 --- a/spec/lib/activitypub/parser/status_parser_spec.rb +++ b/spec/lib/activitypub/parser/status_parser_spec.rb @@ -49,6 +49,24 @@ RSpec.describe ActivityPub::Parser::StatusParser do ) end + context 'when the likes collection is not inlined' do + let(:object_json) do + { + id: [ActivityPub::TagManager.instance.uri_for(sender), 'post1'].join('/'), + type: 'Note', + to: 'https://www.w3.org/ns/activitystreams#Public', + content: 'bleh', + published: 1.hour.ago.utc.iso8601, + updated: 1.hour.ago.utc.iso8601, + likes: 'https://example.com/collections/likes', + } + end + + it 'does not raise an error' do + expect { subject.favourites_count }.to_not raise_error + end + end + describe '#quote_policy' do subject do described_class