about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--app/services/import_service.rb2
-rw-r--r--spec/fixtures/files/utf8-followers.txt1
-rw-r--r--spec/services/import_service_spec.rb23
4 files changed, 26 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 72f62a1dc..93f05a650 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -185,6 +185,7 @@ Some of the features in this release have been funded through the [NGI0 Discover
 - Fix `CDN_HOST` not being used in some asset URLs ([tribela](https://github.com/mastodon/mastodon/pull/18662))
 - Fix `CAS_DISPLAY_NAME`, `SAML_DISPLAY_NAME` and `OIDC_DISPLAY_NAME` being ignored ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18568))
 - Fix various typos in comments throughout the codebase ([luzpaz](https://github.com/mastodon/mastodon/pull/18604))
+- Fix CSV upload no longer breaks if an server domain includes UTF-8 characters ([HamptonMakes]())
 
 ### Security
 
diff --git a/app/services/import_service.rb b/app/services/import_service.rb
index ece5b9ef0..2f48abc36 100644
--- a/app/services/import_service.rb
+++ b/app/services/import_service.rb
@@ -136,7 +136,7 @@ class ImportService < BaseService
   end
 
   def import_data
-    Paperclip.io_adapters.for(@import.data).read
+    Paperclip.io_adapters.for(@import.data).read.force_encoding(Encoding::UTF_8)
   end
 
   def relations_map_for_account(account, account_ids)
diff --git a/spec/fixtures/files/utf8-followers.txt b/spec/fixtures/files/utf8-followers.txt
new file mode 100644
index 000000000..9d4fe3485
--- /dev/null
+++ b/spec/fixtures/files/utf8-followers.txt
@@ -0,0 +1 @@
+@nare@թութ.հայ
diff --git a/spec/services/import_service_spec.rb b/spec/services/import_service_spec.rb
index 764225aa7..e2d182920 100644
--- a/spec/services/import_service_spec.rb
+++ b/spec/services/import_service_spec.rb
@@ -172,6 +172,29 @@ RSpec.describe ImportService, type: :service do
     end
   end
 
+  # Based on the bug report 20571 where UTF-8 encoded domains were rejecting import of their users
+  #
+  # https://github.com/mastodon/mastodon/issues/20571
+  context 'utf-8 encoded domains' do
+    subject { ImportService.new }
+
+    let!(:nare)     { Fabricate(:account, username: 'nare', domain: 'թութ.հայ', locked: false, protocol: :activitypub, inbox_url: 'https://թութ.հայ/inbox') }
+
+    # Make sure to not actually go to the remote server
+    before do
+      stub_request(:post, "https://թութ.հայ/inbox").to_return(status: 200)
+    end
+
+    let(:csv) { attachment_fixture('utf8-followers.txt') }
+    let(:import) { Import.create(account: account, type: 'following', data: csv) }
+
+    it 'follows the listed account' do
+    expect(account.follow_requests.count).to eq 0
+      subject.call(import)
+      expect(account.follow_requests.count).to eq 1
+    end
+  end
+
   context 'import bookmarks' do
     subject { ImportService.new }