[vlc-devel] [PATCH] added handling of wrong MIME boundary separator to mjpeg demux

Sergey Radionov rsatom at gmail.com
Tue Sep 25 02:23:04 CEST 2012


2012/9/25 Hugo Beauzée-Luyssen <hugo at beauzee.fr>:
> On Mon, Sep 24, 2012 at 5:28 PM, Sergey Radionov <rsatom at gmail.com> wrote:
>> 2012/9/14 Sergey Radionov <rsatom at gmail.com>:
>>> ---
>>>  modules/demux/mjpeg.c |   53 ++++++++++++++++++++++++-------------------------
>>>  1 files changed, 26 insertions(+), 27 deletions(-)
>>>
>>> diff --git a/modules/demux/mjpeg.c b/modules/demux/mjpeg.c
>>> index ca62a21..6ab136f 100644
>>> --- a/modules/demux/mjpeg.c
>>> +++ b/modules/demux/mjpeg.c
>>> @@ -191,33 +191,8 @@ static bool CheckMimeHeader( demux_t *p_demux, int *p_header_size )
>>>      if( strncmp( (char *)p_sys->p_peek, "--", 2 ) != 0
>>>          && strncmp( (char *)p_sys->p_peek, "\r\n--", 4 ) != 0 )
>>>      {
>>> -        /* Some broken stream may lack the first boundary */
>>> -        if ( p_sys->psz_separator == NULL )
>>> -        {
>>> -            msg_Warn( p_demux, "Malformed stream. Trying to work around");
>>> -            char *content_type = stream_ContentType( p_demux->s );
>>> -            if ( content_type == NULL )
>>> -                return false;
>>> -            const char* boundary = strstr( content_type, "boundary=--" );
>>> -            if ( boundary != NULL )
>>> -            {
>>> -                p_sys->psz_separator = strdup( boundary + strlen( "boundary=--" ) );
>>> -                msg_Dbg( p_demux, "Video boundary extracted from Content-Type: %s", p_sys->psz_separator );
>>> -                free( content_type );
>>> -                /* Skip to HTTP header parsing as there's no boundary to extract
>>> -                 * from the stream */
>>> -            }
>>> -            else
>>> -            {
>>> -                free( content_type );
>>> -                return false;
>>> -            }
>>> -        }
>>> -        else
>>> -        {
>>> -            *p_header_size = 0;
>>> -            return false;
>>> -        }
>>> +        *p_header_size = 0;
>>> +        return false;
>>>      }
>>>      else
>>>      {
>>> @@ -344,6 +319,22 @@ static int Open( vlc_object_t * p_this )
>>>      p_sys->psz_separator = NULL;
>>>      p_sys->i_frame_size_estimate = 15 * 1024;
>>>
>>> +    char *content_type = stream_ContentType( p_demux->s );
>>> +    if ( content_type )
>>> +    {
>>> +        //FIXME: this is not fully match to RFC
>>> +        char* boundary = strstr( content_type, "boundary=" );
>>> +        if( boundary )
>>> +        {
>>> +            p_sys->psz_separator = strdup( boundary + strlen("boundary=") );
>>> +            if( !p_sys->psz_separator ) {
> Please but the brace on a newline.
Sorry, always forget about it...

>>> +                free( content_type );
>>> +                goto error;
>>> +            }
>>> +        }
>>> +        free( content_type );
>>> +    }
>>> +
>>>      b_matched = CheckMimeHeader( p_demux, &i_size);
>>>      if( b_matched )
>>>      {
>>> @@ -393,6 +384,7 @@ static int Open( vlc_object_t * p_this )
>>>      return VLC_SUCCESS;
>>>
>>>  error:
>>> +    free( p_sys->psz_separator );
>>>      free( p_sys );
>>>      return VLC_EGENERIC;
>>>  }
>>> @@ -516,6 +508,13 @@ static int MimeDemux( demux_t *p_demux )
>>>          {
>>>              break;
>>>          }
>>> +        //sometimes in Content-Type the boundary is defined something like "--video boundary--"
>>> +        else if( !strncmp( p_sys->psz_separator, "--", 2 ) &&
>>> +                 !strncmp( p_sys->psz_separator, (char *)(p_sys->p_peek + i),
>>> +                 strlen( p_sys->psz_separator ) ) )
>>> +        {
> This could probably be merged in the previous if
Ok.

>
>>> +            break;
>>> +        }
>>>
>>>          i++;
>>>          i_size++;
>>> --
>>> 1.7.7.1.msysgit.0
>>>
>>
>> Anybody?
>> _______________________________________________
>> vlc-devel mailing list
>> To unsubscribe or modify your subscription options:
>> http://mailman.videolan.org/listinfo/vlc-devel
>
> Despite some cosmetic stuff, LGTM.
>
> Regards,
>
> --
> Hugo Beauzée-Luyssen
> mail: hugo at beauzee.fr
> skype: beauze.h
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> http://mailman.videolan.org/listinfo/vlc-devel



More information about the vlc-devel mailing list