From f0c6a6f7be2e90bdee35bcfc1dd4c4543a05ca1c Mon Sep 17 00:00:00 2001 From: RomelaGG <272201332+RomelaGG@users.noreply.github.com> Date: Tue, 5 May 2026 12:51:59 +0400 Subject: [PATCH] Preserve file extensions for generic attachments --- .../Messages/Attachments/V2/AttachmentStream.swift | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/SignalServiceKit/Messages/Attachments/V2/AttachmentStream.swift b/SignalServiceKit/Messages/Attachments/V2/AttachmentStream.swift index 4b5eefa34b3..c4bf23af51b 100644 --- a/SignalServiceKit/Messages/Attachments/V2/AttachmentStream.swift +++ b/SignalServiceKit/Messages/Attachments/V2/AttachmentStream.swift @@ -87,12 +87,19 @@ public class AttachmentStream { /// will instead be inferred from the file contents) and made url-safe AND user-friendly. If nil, a random file name is used. public func makeDecryptedCopy(filename: String?) throws -> URL { var pathExtension: String = { - if let pathExtension = MimeTypeUtil.fileExtensionForMimeType(mimeType) { + if + case .file = contentType, + // Generic file MIME types are often lossy (e.g. .srt -> text/plain -> .txt), + // so preserve the sender's filename extension when available. + let filename, + let pathExtension = (filename as NSString).pathExtension.nilIfEmpty + { + return pathExtension + } else if let pathExtension = MimeTypeUtil.fileExtensionForMimeType(mimeType) { return pathExtension } else if let filename, - let filenameUrl = URL(string: filename), - let pathExtension = filenameUrl.pathExtension.nilIfEmpty + let pathExtension = (filename as NSString).pathExtension.nilIfEmpty { return pathExtension } else {