commit: 28d292047207231631ed8a42257eff129c018868
parent: 34bfea8bbf6c8a0df285fcbaebc37c2ecb1cdb16
Author: ThibG <thib@sitedethib.com>
Date: Wed, 7 Jun 2017 12:28:16 +0200
Fixes #3388 by moving re-entrant `shared_status_from_xml` before transaction block (#3622)
Steps to reproduce the original issue:
1. Have two remote accounts, A that you don't follow, and B that you follow.
2. Have A post a toot and reply to it.
3. Boost A's reply from remote account B.
This used to cause the local instance to get A's reply but fail to link it to
the original post.
Diffstat:
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/app/services/process_feed_service.rb b/app/services/process_feed_service.rb
@@ -51,6 +51,11 @@ class ProcessFeedService < BaseService
Rails.logger.debug "Creating remote status #{id}"
+ if verb == :share
+ original_status = shared_status_from_xml(@xml.at_xpath('.//activity:object', activity: TagManager::AS_XMLNS))
+ return nil if original_status.nil?
+ end
+
ApplicationRecord.transaction do
status, just_created = status_from_xml(@xml)
@@ -58,14 +63,10 @@ class ProcessFeedService < BaseService
return status unless just_created
if verb == :share
- original_status = shared_status_from_xml(@xml.at_xpath('.//activity:object', activity: TagManager::AS_XMLNS))
- status.reblog = original_status
-
- if original_status.nil?
- status.destroy
- return nil
- elsif original_status.reblog?
+ if original_status.reblog?
status.reblog = original_status.reblog
+ else
+ status.reblog = original_status
end
end