Signed-off-by: Marton Balint <c...@passwd.hu>
---
 libavformat/assenc.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/libavformat/assenc.c b/libavformat/assenc.c
index 68c3396e5a..265b5996ac 100644
--- a/libavformat/assenc.c
+++ b/libavformat/assenc.c
@@ -156,16 +156,23 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
     ASSContext *ass = s->priv_data;
 
     long int layer;
-    char *p = pkt->data;
+    char *dup = av_strndup(pkt->data, pkt->size);
+    char *p = dup;
     int64_t start = pkt->pts;
     int64_t end   = start + pkt->duration;
     int hh1, mm1, ss1, ms1;
     int hh2, mm2, ss2, ms2;
-    DialogueLine *dialogue = av_mallocz(sizeof(*dialogue));
+    DialogueLine *dialogue;
 
-    if (!dialogue)
+    if (!dup)
         return AVERROR(ENOMEM);
 
+    dialogue = av_mallocz(sizeof(*dialogue));
+    if (!dialogue) {
+        av_free(dup);
+        return AVERROR(ENOMEM);
+    }
+
     dialogue->readorder = strtol(p, &p, 10);
     if (dialogue->readorder < ass->expected_readorder)
         av_log(s, AV_LOG_WARNING, "Unexpected ReadOrder %d\n",
@@ -189,6 +196,8 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
     dialogue->line = 
av_asprintf("%s%ld,%d:%02d:%02d.%02d,%d:%02d:%02d.%02d,%s",
                                  ass->ssa_mode ? "Marked=" : "",
                                  layer, hh1, mm1, ss1, ms1, hh2, mm2, ss2, 
ms2, p);
+    av_free(dup);
+
     if (!dialogue->line) {
         av_free(dialogue);
         return AVERROR(ENOMEM);
-- 
2.26.2

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to