From: Jan Djärv Date: Wed, 9 Oct 2013 18:50:14 +0000 (+0200) Subject: * nsfns.m (Fns_convert_utf8_nfd_to_nfc): Check input for valid UTF-8 X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~1314 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=0486beac541c98698a73688991365298006f7cd3;p=emacs.git * nsfns.m (Fns_convert_utf8_nfd_to_nfc): Check input for valid UTF-8 or throw error. Fixes: debbugs:15570 --- 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; }