summaryrefslogtreecommitdiffstats
path: root/sub
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2012-10-20 20:58:46 +0200
committerwm4 <wm4@nowhere>2012-10-22 01:55:58 +0200
commita781fe14f729e0d3300e0e62aebbae1914d65cd4 (patch)
tree6c3e2ffce9be7fb247832f0b4620c2c217b1c1c0 /sub
parent7b65202e4711899680992b723c3c327bc2fd2983 (diff)
downloadmpv-a781fe14f729e0d3300e0e62aebbae1914d65cd4.tar.bz2
mpv-a781fe14f729e0d3300e0e62aebbae1914d65cd4.tar.xz
osd_libass: increase robustness when handling internal OSD escapes
The \xFF escape is used internally to insert special OSD symbols (which need a font change to the internal OSD font). There was potential for breakage when \xFF was followed by \0, because then "in" would be advanced past the string's end. Normally this can't happen, as it would require invalid UTF-8 input data. But we don't check input for UTF-8 validness, so there's a potential issue here. Garbled output is ok on invalid UTF-8 input, but crashing is not. Make it more robust by checking for this.
Diffstat (limited to 'sub')
-rw-r--r--sub/osd_libass.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sub/osd_libass.c b/sub/osd_libass.c
index 612bef2c56..29450535bc 100644
--- a/sub/osd_libass.c
+++ b/sub/osd_libass.c
@@ -234,7 +234,7 @@ static char *mangle_ass(const char *in)
char *res = talloc_strdup(NULL, "");
while (*in) {
// As used by osd_get_function_sym().
- if (in[0] == '\xFF') {
+ if (in[0] == '\xFF' && in[1]) {
res = talloc_strdup_append_buffer(res, ASS_USE_OSD_FONT);
res = append_utf8_buffer(res, OSD_CODEPOINTS + in[1]);
res = talloc_strdup_append_buffer(res, "{\\r}");