summaryrefslogtreecommitdiffstats
path: root/sub
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-12-19 21:21:36 +0100
committerwm4 <wm4@nowhere>2015-12-19 21:21:36 +0100
commitc01935986c68288ae5ad82e68cac0744740d8a0a (patch)
tree6df44d83082544c1366041286615d52371642cc0 /sub
parent0a0bb9059f42671c267ea5d0c8faa3ac71a8c742 (diff)
downloadmpv-c01935986c68288ae5ad82e68cac0744740d8a0a.tar.bz2
mpv-c01935986c68288ae5ad82e68cac0744740d8a0a.tar.xz
lavc_conv: fix invalid write
Well shit. Restructure it such that the returned list is always NULL- terminated with the same mechanism.
Diffstat (limited to 'sub')
-rw-r--r--sub/lavc_conv.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/sub/lavc_conv.c b/sub/lavc_conv.c
index 21e54c04a7..7e2ed4ef25 100644
--- a/sub/lavc_conv.c
+++ b/sub/lavc_conv.c
@@ -232,9 +232,9 @@ char **lavc_conv_decode(struct lavc_conv *priv, struct demux_packet *packet)
AVPacket pkt;
AVPacket parsed_pkt = {0};
int ret, got_sub;
+ int num_cur = 0;
avsubtitle_free(&priv->cur);
- priv->cur_list[0] = NULL;
mp_set_av_packet(&pkt, packet, &avctx->time_base);
@@ -250,7 +250,6 @@ char **lavc_conv_decode(struct lavc_conv *priv, struct demux_packet *packet)
if (ret < 0) {
MP_ERR(priv, "Error decoding subtitle\n");
} else if (got_sub) {
- int num_cur = 0;
for (int i = 0; i < priv->cur.num_rects; i++) {
if (priv->cur.rects[i]->w > 0 && priv->cur.rects[i]->h > 0)
MP_WARN(priv, "Ignoring bitmap subtitle.\n");
@@ -259,11 +258,11 @@ char **lavc_conv_decode(struct lavc_conv *priv, struct demux_packet *packet)
continue;
MP_TARRAY_APPEND(priv, priv->cur_list, num_cur, ass_line);
}
- MP_TARRAY_APPEND(priv, priv->cur_list, num_cur, NULL);
}
done:
av_packet_unref(&parsed_pkt);
+ MP_TARRAY_APPEND(priv, priv->cur_list, num_cur, NULL);
return priv->cur_list;
}