From 258444bb93b974825c428ef45db58e288d742f18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Sat, 4 Oct 2014 00:58:13 +0200 Subject: [PATCH] oc-rtf: Be more resilient to spaces while parsing font tables This avoids to crash on this example: \f0\fibi \fcharset0 -------^ Or: \f0 \fibi\fcharset0 --^ Take into account that I found lots of RTF documents with this format: \f0\fbidi \froman\fcharset0 \f0\froman\fprq2 \fcharset0 Which are not unsupported by this handler. --- OpenChange/RTFHandler.m | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/OpenChange/RTFHandler.m b/OpenChange/RTFHandler.m index fbcea8121..f9dd47db3 100644 --- a/OpenChange/RTFHandler.m +++ b/OpenChange/RTFHandler.m @@ -573,7 +573,7 @@ const unsigned short ansicpg874[256] = { // Skip our control word if (strncmp((const char*)cw, "fonttbl", len) == 0) continue; - + // We must at least parse s = [[NSString alloc] initWithBytesNoCopy: (void *)cw+1 length: len-1 @@ -588,12 +588,18 @@ const unsigned short ansicpg874[256] = { // We now parse cw = [self parseControlWord: &len]; + if (len == 0) // Possibly parsing a space + cw = [self parseControlWord: &len]; + fontInfo->family = [[NSString alloc] initWithBytesNoCopy: (void *)cw+1 length: len-1 encoding: NSASCIIStringEncoding freeWhenDone: NO]; cw = [self parseControlWord: &len]; + if (len == 0) // Possibly parsing a space + cw = [self parseControlWord: &len]; + fontInfo->charset = [[NSString alloc] initWithBytesNoCopy: (void *)cw+1 length: len-1 encoding: NSASCIIStringEncoding