[FFmpeg-devel] [PATCH] Fix potential crash in swscale.c:pal2rgbWrapper()

Michael Niedermayer michaelni
Sun Jan 17 19:50:51 CET 2010


On Sun, Jan 17, 2010 at 03:11:30PM +0100, Stefano Sabatini wrote:
> Hi, as in subject.
> 
> If pal2rgbWrapper is fed with a non-paletted format it currently
> prints an error and then select a converter anyway, which will then be
> used to scale non-paletted formats.
> 
> Sane behavior seems to simply warn the user and don't do nothing.



> 
> Bonus patch factorize the log message printing in case of error.
> 
> Regards.
> -- 
> FFmpeg = Fiendish and Furious Murdering Power Ecumenical God

>  swscale.c |    5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 8d6b68a5d7e82f86c7bab285689f3dd1a21d4a2b  fix-pal2rgb-wrapper.patch

probably ok, dont forget testing!


> Index: ffmpeg/libswscale/swscale.c
> ===================================================================
> --- ffmpeg.orig/libswscale/swscale.c	2010-01-17 13:45:48.000000000 +0100
> +++ ffmpeg/libswscale/swscale.c	2010-01-17 13:47:18.000000000 +0100
> @@ -2035,7 +2035,7 @@
>      if (!usePal(srcFormat))
>          av_log(c, AV_LOG_ERROR, "internal error %s -> %s converter\n",
>                 sws_format_name(srcFormat), sws_format_name(dstFormat));
> -
> +    else {
>      switch(dstFormat) {
>      case PIX_FMT_RGB32  : conv = palette8topacked32; break;
>      case PIX_FMT_BGR32  : conv = palette8topacked32; break;
> @@ -2046,8 +2046,9 @@
>      default: av_log(c, AV_LOG_ERROR, "internal error %s -> %s converter\n",
>                      sws_format_name(srcFormat), sws_format_name(dstFormat)); break;
>      }
> +    }
>  
> -
> +    if (conv)
>      for (i=0; i<srcSliceH; i++) {
>          conv(srcPtr, dstPtr, c->srcW, (uint8_t *) c->pal_rgb);
>          srcPtr+= srcStride[0];

>  swscale.c |   12 +++++-------
>  1 file changed, 5 insertions(+), 7 deletions(-)
> 1a5996aaa59b886aeff719e820736137711867d6  factorize-errlog-in-pal2rgb-wrapper.patch
> Index: ffmpeg/libswscale/swscale.c
> ===================================================================
> --- ffmpeg.orig/libswscale/swscale.c	2010-01-17 13:49:11.000000000 +0100
> +++ ffmpeg/libswscale/swscale.c	2010-01-17 13:50:38.000000000 +0100
> @@ -2032,10 +2032,7 @@
>      uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY;
>      const uint8_t *srcPtr= src[0];
>  
> -    if (!usePal(srcFormat))
> -        av_log(c, AV_LOG_ERROR, "internal error %s -> %s converter\n",
> -               sws_format_name(srcFormat), sws_format_name(dstFormat));
> -    else {
> +    if (usePal(srcFormat)) {
>          switch(dstFormat) {
>          case PIX_FMT_RGB32  : conv = palette8topacked32; break;
>          case PIX_FMT_BGR32  : conv = palette8topacked32; break;
> @@ -2043,12 +2040,13 @@
>          case PIX_FMT_RGB32_1: conv = palette8topacked32; break;
>          case PIX_FMT_RGB24  : conv = palette8topacked24; break;
>          case PIX_FMT_BGR24  : conv = palette8topacked24; break;
> -        default: av_log(c, AV_LOG_ERROR, "internal error %s -> %s converter\n",
> -                        sws_format_name(srcFormat), sws_format_name(dstFormat)); break;
>          }
>      }
>  
> -    if (conv)
> +    if (!conv)
> +        av_log(c, AV_LOG_ERROR, "internal error %s -> %s converter\n",
> +               sws_format_name(srcFormat), sws_format_name(dstFormat));
> +    else

{}
also i assume conv is inited to NULL (didnt check)
otherwise it should be ok if tested

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

I do not agree with what you have to say, but I'll defend to the death your
right to say it. -- Voltaire
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20100117/1be1fe56/attachment.pgp>



More information about the ffmpeg-devel mailing list