diff options
author | Stefano Pigozzi <stefano.pigozzi@gmail.com> | 2013-12-06 18:36:24 +0100 |
---|---|---|
committer | Grigori Goronzy <greg@chown.ath.cx> | 2015-07-10 10:42:40 +0200 |
commit | 24254d714139f978be83b8e658f5bd58233990d8 (patch) | |
tree | 34dbe1e97dfa771459ac595484402546ec535ad6 | |
parent | 30985285382527b08cc627873ba8795124c34862 (diff) | |
download | libass-24254d714139f978be83b8e658f5bd58233990d8.tar.bz2 libass-24254d714139f978be83b8e658f5bd58233990d8.tar.xz |
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.
-rw-r--r-- | libass/ass_coretext.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/libass/ass_coretext.c b/libass/ass_coretext.c index ad054437..bf2e3014 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; } } |