[FFmpeg-devel] [PATCH 1/2] avformat/microdvd: skip BOM properly

Clément Bœsch u at pkh.me
Mon Mar 3 23:37:39 CET 2014


On Sun, Mar 02, 2014 at 10:36:41PM +0100, wm4 wrote:
> The BOM is already skipped in the probe function, but not the header
> read function. This could cause the header to be misparsed, such as
> not interpreting the FPS line.
> ---
>  libavformat/microdvddec.c | 13 ++++++++++---
>  1 file changed, 10 insertions(+), 3 deletions(-)
> 
> diff --git a/libavformat/microdvddec.c b/libavformat/microdvddec.c
> index 7b49e43..42c6de0 100644
> --- a/libavformat/microdvddec.c
> +++ b/libavformat/microdvddec.c
> @@ -71,22 +71,29 @@ static int get_duration(const char *buf)
>      return -1;
>  }
>  
> +static const char *bom = "\xEF\xBB\xBF";
> +
>  static int microdvd_read_header(AVFormatContext *s)
>  {
>      AVRational pts_info = (AVRational){ 2997, 125 };  /* default: 23.976 fps */
>      MicroDVDContext *microdvd = s->priv_data;
>      AVStream *st = avformat_new_stream(s, NULL);
>      int i = 0;
> -    char line[MAX_LINESIZE];
> +    char line_buf[MAX_LINESIZE];
>  
>      if (!st)
>          return AVERROR(ENOMEM);
>  
>      while (!url_feof(s->pb)) {
> -        char *p = line;
> +        char *p;
>          AVPacket *sub;
>          int64_t pos = avio_tell(s->pb);
> -        int len = ff_get_line(s->pb, line, sizeof(line));
> +        int len = ff_get_line(s->pb, line_buf, sizeof(line_buf));
> +        char *line = line_buf;
> +
> +        if (!strncmp(line, bom, 3))
> +            line += 3;
> +        p = line;
>  
>          if (!len)
>              break;

Applied, thanks.

-- 
Clément B.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20140303/6431fedb/attachment.asc>


More information about the ffmpeg-devel mailing list