From 02f855059babc7e01b25c1cf01d44dae52c777a1 Mon Sep 17 00:00:00 2001 From: smizrahi Date: Thu, 23 Feb 2023 11:58:58 +0100 Subject: [PATCH] fix(mail): Fix segfault when TNEF does not get any data. Fixes #4190 --- SoObjects/Mailer/SOGoTNEFMailBodyPart.m | 40 ++++++++++++++----------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/SoObjects/Mailer/SOGoTNEFMailBodyPart.m b/SoObjects/Mailer/SOGoTNEFMailBodyPart.m index b76104fdd..89cab4d1a 100644 --- a/SoObjects/Mailer/SOGoTNEFMailBodyPart.m +++ b/SoObjects/Mailer/SOGoTNEFMailBodyPart.m @@ -705,15 +705,17 @@ unsigned char GetRruleMonthNum(unsigned char a, unsigned char b) { if (isObject) { // This is an "embedded object", so skip the 16-byte identifier first. - memcpy(&object_signature, filedata->data + 16, sizeof(DWORD)); - if (TNEFCheckForSignature(object_signature) == 0) { - TNEFInitialize(&emb_tnef); - emb_tnef.Debug = tnef.Debug; - if (TNEFParseMemory(filedata->data + 16, filedata->size - 16, &emb_tnef) != -1) - { - isRealAttachment = NO; - } - TNEFFree(&emb_tnef); + if (NULL != filedata->data) { + memcpy(&object_signature, filedata->data + 16, sizeof(DWORD)); + if (TNEFCheckForSignature(object_signature) == 0) { + TNEFInitialize(&emb_tnef); + emb_tnef.Debug = tnef.Debug; + if (TNEFParseMemory(filedata->data + 16, filedata->size - 16, &emb_tnef) != -1) + { + isRealAttachment = NO; + } + TNEFFree(&emb_tnef); + } } } else @@ -798,16 +800,18 @@ unsigned char GetRruleMonthNum(unsigned char a, unsigned char b) { } NSData *attachment; - if (isObject) - attachment = [NSData dataWithBytes: filedata->data + 16 length: filedata->size - 16]; - else - attachment = [NSData dataWithBytes: filedata->data length: filedata->size]; + if (NULL != filedata->data) { + if (isObject) + attachment = [NSData dataWithBytes: filedata->data + 16 length: filedata->size - 16]; + else + attachment = [NSData dataWithBytes: filedata->data length: filedata->size]; - [self bodyPartForAttachment: attachment - withName: partName - andType: type - andSubtype: subtype - andContentId: cid]; + [self bodyPartForAttachment: attachment + withName: partName + andType: type + andSubtype: subtype + andContentId: cid]; + } // count++; }