From 0486beac541c98698a73688991365298006f7cd3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20Dj=C3=A4rv?= Date: Wed, 9 Oct 2013 20:50:14 +0200 Subject: [PATCH] * nsfns.m (Fns_convert_utf8_nfd_to_nfc): Check input for valid UTF-8 or throw error. Fixes: debbugs:15570 --- src/ChangeLog | 5 +++++ src/nsfns.m | 21 ++++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index e4456b2ce2b..1a05203273f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2013-10-09 Jan Djärv + + * nsfns.m (Fns_convert_utf8_nfd_to_nfc): Check input for valid UTF-8 + or throw error (Bug#15570). + 2013-10-09 Paul Eggert * intervals.c (temp_set_point_both): Move test into 'eassert', diff --git a/src/nsfns.m b/src/nsfns.m index 93b7d12becb..24edd4366ce 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -2048,16 +2048,27 @@ DEFUN ("ns-convert-utf8-nfd-to-nfc", Fns_convert_utf8_nfd_to_nfc, /* TODO: If GNUstep ever implements precomposedStringWithCanonicalMapping, remove this. */ NSString *utfStr; - Lisp_Object ret; + Lisp_Object ret = Qnil; + NSAutoreleasePool *pool; CHECK_STRING (str); - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - utfStr = [NSString stringWithUTF8String: SSDATA (str)]; + pool = [[NSAutoreleasePool alloc] init]; + utfStr = [NSString stringWithUTF8String: SSDATA (str)]; #ifdef NS_IMPL_COCOA - utfStr = [utfStr precomposedStringWithCanonicalMapping]; + if (utfStr) + utfStr = [utfStr precomposedStringWithCanonicalMapping]; #endif - ret = build_string ([utfStr UTF8String]); + if (utfStr) + { + const char *cstr = [utfStr UTF8String]; + if (cstr) + ret = build_string (cstr); + } + [pool release]; + if (NILP (ret)) + error ("Invalid UTF-8"); + return ret; } -- 2.39.5