diff options
author | Jan Djärv <[email protected]> | 2013-10-09 20:50:14 +0200 |
---|---|---|
committer | Jan Djärv <[email protected]> | 2013-10-09 20:50:14 +0200 |
commit | 0486beac541c98698a73688991365298006f7cd3 (patch) | |
tree | a338e3939c690d258b1aba72f056138f5189b7c5 /src/nsfns.m | |
parent | 14afa541a6e28b69d2cb6f22bf0f2d22ab2d8b2d (diff) |
* nsfns.m (Fns_convert_utf8_nfd_to_nfc): Check input for valid UTF-8
or throw error.
Fixes: debbugs:15570
Diffstat (limited to 'src/nsfns.m')
-rw-r--r-- | src/nsfns.m | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/nsfns.m b/src/nsfns.m index 93b7d12bec..24edd4366c 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; } |