From 4ccad0321f24a5cd641d8b9ea73f829ff99aa809 Mon Sep 17 00:00:00 2001 From: Tony Cebzanov Date: Thu, 9 Jul 2026 02:18:53 -0400 Subject: [PATCH] Validate story attachment MIME type and fix D-Bus stub - Reject non-image/video attachments before uploading, since stories only support image and video content - Change DbusManagerImpl.sendStory to throw UnsupportedOperationException to match the pattern used by all other unimplemented D-Bus methods --- .../java/org/asamk/signal/manager/internal/ManagerImpl.java | 6 ++++++ src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java index d5a72a88..72f16a95 100644 --- a/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java @@ -835,6 +835,12 @@ public class ManagerImpl implements Manager { String attachment, boolean allowsReplies ) throws IOException, AttachmentInvalidException { + final var file = new File(attachment); + final var mimeType = MimeUtils.getFileMimeType(file); + if (mimeType.isEmpty() || (!mimeType.get().startsWith("image/") && !mimeType.get().startsWith("video/"))) { + throw new AttachmentInvalidException(attachment, + new IOException("Stories only support image and video attachments")); + } final var uploadedAttachment = context.getAttachmentHelper().uploadAttachment(attachment); final var storyMessage = SignalServiceStoryMessage.forFileAttachment(account.getProfileKey().serialize(), null, diff --git a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java index de8df1f8..3de99600 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java @@ -544,7 +544,7 @@ public class DbusManagerImpl implements Manager { @Override public SendMessageResults sendStory(String attachment, boolean allowsReplies) { - return new SendMessageResults(0, Map.of()); + throw new UnsupportedOperationException(); } @Override