From 31c0473c48238de2288e5a5c0c8295fc67710d32 Mon Sep 17 00:00:00 2001 From: Hivert Quentin Date: Fri, 24 May 2024 15:57:56 +0200 Subject: [PATCH] fix(calendar): fix crash when using a 2*16bits chars at the 75th char of ics file --- SOPE/NGCards/NSString+NGCards.m | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/SOPE/NGCards/NSString+NGCards.m b/SOPE/NGCards/NSString+NGCards.m index b72e0ea51c..2dc582966e 100644 --- a/SOPE/NGCards/NSString+NGCards.m +++ b/SOPE/NGCards/NSString+NGCards.m @@ -45,19 +45,27 @@ - (NSString *) foldedForVersitCards [foldedString appendString: self]; else { - subStringRange = NSMakeRange (0, 75); - [foldedString appendFormat: @"%@\r\n", - [self substringWithRange: subStringRange]]; - subStringRange = NSMakeRange (75, 74); + //Check if the 75th chars is a 2*16bits chars, in this case, cut one char before + unichar c = [self characterAtIndex: 74]; + int substringCut; + if (c >= 0xD800 && c <= 0xDBFF) + substringCut = 74; + else + substringCut = 75; + subStringRange = NSMakeRange (0, substringCut); + [foldedString appendFormat: @"%@\r\n", [self substringWithRange: subStringRange]]; + + subStringRange = NSMakeRange (substringCut, 74); while ((length - subStringRange.location) > 75) { - [foldedString appendFormat: @" %@\r\n", - [self substringWithRange: subStringRange]]; - subStringRange.location += 74; + c = [self characterAtIndex: (subStringRange.location+subStringRange.length-1)]; + if (c >= 0xD800 && c <= 0xDBFF) + subStringRange.length--; + [foldedString appendFormat: @" %@\r\n", [self substringWithRange: subStringRange]]; + subStringRange.location += subStringRange.length; } subStringRange.length = length - subStringRange.location; - [foldedString appendFormat: @" %@", - [self substringWithRange: subStringRange]]; + [foldedString appendFormat: @" %@", [self substringWithRange: subStringRange]]; } return foldedString;