[FFmpeg-devel] [PATCH] mpjpeg: CRLF terminating a sequence of MIME headers should not cause an error

Alex Agranovsky alex at sighthound.com
Sat Sep 12 22:50:52 CEST 2015


 libavformat/mpjpegdec.c | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/libavformat/mpjpegdec.c b/libavformat/mpjpegdec.c
index 8413ae7..c1ca508 100644
--- a/libavformat/mpjpegdec.c
+++ b/libavformat/mpjpegdec.c
@@ -43,11 +43,22 @@ static int get_line(AVIOContext *pb, char *line, int line_size)
 static int split_tag_value(char **tag, char **value, char *line)
 {
     char *p = line;
+    int  foundData = 0;
 
-    while (*p != '\0' && *p != ':')
+    *tag = NULL;
+    *value = NULL;
+
+
+    while (*p != '\0' && *p != ':') {
+        if (!av_isspace(*p)) {
+            foundData = 1;
+        }
         p++;
-    if (*p != ':')
-        return AVERROR_INVALIDDATA;
+    }
+    if (*p != ':') {
+        /* don't fail the parser if dealing with an empty line */
+        return foundData?AVERROR_INVALIDDATA:0;
+    }
 
     *p   = '\0';
     *tag = line;
@@ -166,12 +177,15 @@ static int parse_multipart_header(AVFormatContext *s)
         ret = get_line(s->pb, line, sizeof(line));
         if (ret < 0)
             break;
+        /* CRLF terminates a sequence of MIME headers */
+        if (value==NULL || tag==NULL)
+            break;
 
         if (line[0] == '\0')
             break;
 
         ret = split_tag_value(&tag, &value, line);
-        if (ret < 0)
+        if (ret < 0 || tag == NULL || value == NULL)
             return ret;
 
         if (!av_strcasecmp(tag, "Content-type")) {


-- 
Alex Agranovsky
Sighthound, Inc
www.sighthound.com	


More information about the ffmpeg-devel mailing list