summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefano Pigozzi <stefano.pigozzi@gmail.com>2013-12-06 18:36:24 +0100
committerGrigori Goronzy <greg@chown.ath.cx>2015-07-10 10:42:40 +0200
commit24254d714139f978be83b8e658f5bd58233990d8 (patch)
tree34dbe1e97dfa771459ac595484402546ec535ad6
parent30985285382527b08cc627873ba8795124c34862 (diff)
downloadlibass-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.c8
1 files changed, 5 insertions, 3 deletions
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;
}
}