matrix-org/matrix-ios-sdk

Crash when sending file with unrecognized extension

Opened this issue · 1 comments

In a room, if I send a file attachment with unrecognized extension, the application crashes.

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]'

The crash occurs here :

    // Prepare the message content for building an echo message
    NSMutableDictionary *msgContent = @{
        kMXMessageTypeKey: msgType,
        kMXMessageBodyKey: filename,
        @"url": fakeMediaURI,
        @"info": @{
                @"mimetype": mimeType,
                @"size": @(fileData.length)
        },
        kMXMessageContentKeyExtensibleTextMSC1767: filename,
        kMXMessageContentKeyExtensibleFileMSC1767: @{
                kMXMessageContentKeyExtensibleFileSize: @(fileData.length),
                kMXMessageContentKeyExtensibleFileName: filename,
                kMXMessageContentKeyExtensibleFileURL: fakeMediaURI,
                kMXMessageContentKeyExtensibleFileMimeType: mimeType
        }.mutableCopy}.mutableCopy;

because mimeType is nil.

When mimeTypeis nil, it shoud fallback to application/octet-stream.

The fix is :

    // Prepare the message content for building an echo message
    NSMutableDictionary *msgContent = @{
        kMXMessageTypeKey: msgType,
        kMXMessageBodyKey: filename,
        @"url": fakeMediaURI,
        @"info": @{
            @"mimetype": (mimeType ?: @"application/octet-stream"),
                @"size": @(fileData.length)
        },
        kMXMessageContentKeyExtensibleTextMSC1767: filename,
        kMXMessageContentKeyExtensibleFileMSC1767: @{
                kMXMessageContentKeyExtensibleFileSize: @(fileData.length),
                kMXMessageContentKeyExtensibleFileName: filename,
                kMXMessageContentKeyExtensibleFileURL: fakeMediaURI,
                kMXMessageContentKeyExtensibleFileMimeType: (mimeType ?: @"@application/octet-stream"),
        }.mutableCopy}.mutableCopy;