From 1e878f38457d22adb55d9b08b7f58543fdb92318 Mon Sep 17 00:00:00 2001 From: Wu Shuwen Date: Wed, 28 Oct 2026 15:27:56 +0800 Subject: [PATCH] Handle oversized attachment dimensions (#2157) --- .../org/asamk/signal/commands/SendCommand.java | 11 +++++++++-- .../signal/commands/SendCommandParsingTest.java | 14 ++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/asamk/signal/commands/SendCommand.java b/src/main/java/org/asamk/signal/commands/SendCommand.java index dc6be9a4..b4c9b51d 100644 --- a/src/main/java/org/asamk/signal/commands/SendCommand.java +++ b/src/main/java/org/asamk/signal/commands/SendCommand.java @@ -313,8 +313,15 @@ public class SendCommand implements JsonRpcLocalCommand { + dimension + ") expected 'WIDTHxHEIGHT'"); } - dimensions.add(new Message.AttachmentDimensions(Integer.parseInt(matcher.group(1)), - Integer.parseInt(matcher.group(2)))); + try { + dimensions.add(new Message.AttachmentDimensions(Integer.parseInt(matcher.group(1)), + Integer.parseInt(matcher.group(2)))); + } catch (NumberFormatException e) { + throw new UserErrorException("Invalid attachment dimensions syntax (" + + dimension + + ") expected 'WIDTHxHEIGHT' with positive 32-bit integer values", + e); + } } return dimensions; } diff --git a/src/test/java/org/asamk/signal/commands/SendCommandParsingTest.java b/src/test/java/org/asamk/signal/commands/SendCommandParsingTest.java index e206dbf7..7378f6a9 100644 --- a/src/test/java/org/asamk/signal/commands/SendCommandParsingTest.java +++ b/src/test/java/org/asamk/signal/commands/SendCommandParsingTest.java @@ -105,6 +105,20 @@ class SendCommandParsingTest { } } + @Test + void rejectsAttachmentDimensionsOutsideIntegerRange() { + for (final var value : List.of("2147483648x1", "1x2147483648")) { + assertThrows(UserErrorException.class, () -> send(namespace(List.of(value))), value); + } + } + + @Test + void acceptsMaximumPositiveAttachmentDimensions() throws Exception { + final var message = send(namespace(List.of("2147483647x2147483647"))); + assertEquals(List.of(new Message.AttachmentDimensions(Integer.MAX_VALUE, Integer.MAX_VALUE)), + message.attachmentDimensions()); + } + @Test void rejectsMalformedBlurHashesBeforeSending() { // Wrong length for its size digit, an unknown size digit, too short.