diff options
author | nanahi <130121847+na-na-hi@users.noreply.github.com> | 2024-04-07 11:57:18 -0400 |
---|---|---|
committer | Kacper Michajłow <kasper93@gmail.com> | 2024-04-17 23:42:35 +0200 |
commit | 715feea8d82a750c3d627ee10c4fd6c6fe1fbe86 (patch) | |
tree | c2163d1a05420d9dbeabd870eb1300026d145e9f | |
parent | dbe377645f11a5bd253e48df1ae69f960499fcd8 (diff) | |
download | mpv-715feea8d82a750c3d627ee10c4fd6c6fe1fbe86.tar.bz2 mpv-715feea8d82a750c3d627ee10c4fd6c6fe1fbe86.tar.xz |
dec_sub: fix locking for sub_ass_get_extradata
sub->sd can be destroyed and recreated when update_segment is called
inside a lock.
Fixes: f9918b53901db2fbc3cfc1be509a32d3ed89556a
-rw-r--r-- | sub/dec_sub.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/sub/dec_sub.c b/sub/dec_sub.c index a8746a27ed..1e316687d8 100644 --- a/sub/dec_sub.c +++ b/sub/dec_sub.c @@ -445,11 +445,14 @@ char *sub_get_text(struct dec_sub *sub, double pts, enum sd_text_type type) char *sub_ass_get_extradata(struct dec_sub *sub) { + mp_mutex_lock(&sub->lock); if (strcmp(sub->sd->codec->codec, "ass") != 0) return NULL; char *extradata = sub->sd->codec->extradata; int extradata_size = sub->sd->codec->extradata_size; - return talloc_strndup(NULL, extradata, extradata_size); + char *data = talloc_strndup(NULL, extradata, extradata_size); + mp_mutex_unlock(&sub->lock); + return data; } struct sd_times sub_get_times(struct dec_sub *sub, double pts) |