From: Stefano Pigozzi Date: Fri, 6 Dec 2013 17:36:24 +0000 (+0100) Subject: coretext: fix conversion from CFStringRef to utf8 buffer X-Git-Tag: 0.13.0~28^2~76 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=24254d714139f978be83b8e658f5bd58233990d8;p=libass coretext: fix conversion from CFStringRef to utf8 buffer The code incorrectly assumed that the utf8 characters could always be represented with only one byte. This commit queries CFStringRef instances for the actual amount of bytes needed. --- diff --git a/libass/ass_coretext.c b/libass/ass_coretext.c index ad05443..bf2e301 100644 --- a/libass/ass_coretext.c +++ b/libass/ass_coretext.c @@ -30,13 +30,15 @@ static char *cfstr2buf(CFStringRef string) { - const char *buf_ptr = CFStringGetCStringPtr(string, kCFStringEncodingUTF8); + const int encoding = kCFStringEncodingUTF8; + const char *buf_ptr = CFStringGetCStringPtr(string, encoding); if (buf_ptr) { return strdup(buf_ptr); } else { - size_t buf_len = CFStringGetLength(string) + 1; + size_t len = CFStringGetLength(string); + CFIndex buf_len = CFStringGetMaximumSizeForEncoding(len, encoding); char *buf = malloc(buf_len); - CFStringGetCString(string, buf, buf_len, kCFStringEncodingUTF8); + CFStringGetCString(string, buf, buf_len, encoding); return buf; } }