diff --git a/localPackages/BitFoundation/Sources/BitFoundation/FileTransferLimits.swift b/localPackages/BitFoundation/Sources/BitFoundation/FileTransferLimits.swift index 4c54f79c..40b20b10 100644 --- a/localPackages/BitFoundation/Sources/BitFoundation/FileTransferLimits.swift +++ b/localPackages/BitFoundation/Sources/BitFoundation/FileTransferLimits.swift @@ -7,15 +7,8 @@ public enum FileTransferLimits { /// Compressed images after downscaling should comfortably fit under this budget. public static let maxImageBytes: Int = 512 * 1024 // 512 KiB /// Worst-case size once TLV metadata and binary packet framing are included for the largest payloads. - public static let maxFramedFileBytes: Int = { - let maxMetadataBytes = Int(UInt16.max) * 2 // fileName + mimeType TLVs - let tlvEnvelopeOverhead = 18 + maxMetadataBytes // TLV tags + lengths + metadata bytes - let binaryEnvelopeOverhead = BinaryProtocol.v2HeaderSize - + BinaryProtocol.senderIDSize - + BinaryProtocol.recipientIDSize - + BinaryProtocol.signatureSize - return maxPayloadBytes + tlvEnvelopeOverhead + binaryEnvelopeOverhead - }() + /// MUST stay in sync with AppConstants.Protocol.MAX_PAYLOAD_LENGTH in the Android repo (issue #1618). + public static let maxFramedFileBytes: Int = 10_485_760 public static func isValidPayload(_ size: Int) -> Bool { size <= maxPayloadBytes diff --git a/localPackages/BitFoundation/Tests/BitFoundationTests/BinaryProtocolTests.swift b/localPackages/BitFoundation/Tests/BitFoundationTests/BinaryProtocolTests.swift index ddf7c8fc..78c6afa0 100644 --- a/localPackages/BitFoundation/Tests/BitFoundationTests/BinaryProtocolTests.swift +++ b/localPackages/BitFoundation/Tests/BitFoundationTests/BinaryProtocolTests.swift @@ -350,6 +350,17 @@ struct BinaryProtocolTests { #expect(BinaryProtocol.decode(encoded) == nil) } + @Test("Regression test for issue #1618: decode payload between 1.13 MiB and 10 MiB") + func payloadSizeBetweenOldAndNewLimit() throws { + let payloadSize = 2_000_000 + let payload = Data(repeating: 0x41, count: payloadSize) + let packet = TestHelpers.createTestPacket(payload: payload) + + let encodedData = try #require(BinaryProtocol.encode(packet), "Failed to encode packet") + let decodedPacket = try #require(BinaryProtocol.decode(encodedData), "Failed to decode packet") + #expect(decodedPacket.payload == payload) + } + // MARK: - Message Padding Tests @Test func messagePadding() throws {