[x265] [PATCH] cli: fix crash when pass the unrecognized options

Steve Borho steve at borho.org
Wed May 20 17:18:05 CEST 2015


On 05/20, gopu at multicorewareinc.com wrote:
> # HG changeset patch
> # User Gopu Govindaswamy <gopu at multicorewareinc.com>
> # Date 1432104767 -19800
> #      Wed May 20 12:22:47 2015 +0530
> # Node ID 86c12f594b8964909f311a5a39f3941f73c94523
> # Parent  9b31a8a7bd57efededcc3884ee7777c09f649394
> cli: fix crash when pass the unrecognized options
> 
> diff -r 9b31a8a7bd57 -r 86c12f594b89 source/x265.cpp
> --- a/source/x265.cpp	Tue May 19 19:51:56 2015 -0500
> +++ b/source/x265.cpp	Wed May 20 12:22:47 2015 +0530
> @@ -176,6 +176,20 @@
>          return true;
>      }
>  
> +    api = x265_api_get(outputBitDepth);
> +    if (!api)
> +    {
> +        x265_log(NULL, X265_LOG_WARNING, "falling back to default bit-depth\n");
> +        api = x265_api_get(0);
> +    }

outputBitDepth hasn't been parsed from argv[] yet, that happens below.

What was the crash? oh.. showHelp() is passing a NULL param. There's a
better way to fix this

> +    param = api->param_alloc();
> +    if (!param)
> +    {
> +        x265_log(NULL, X265_LOG_ERROR, "param alloc failed\n");
> +        return true;
> +    }
> +
>      /* Presets are applied before all other options. */
>      for (optind = 0;; )
>      {
> @@ -189,21 +203,11 @@
>          else if (c == 'D')
>              outputBitDepth = atoi(optarg);
>          else if (c == '?')
> +        {
>              showHelp(param);
> -    }
> -
> -    api = x265_api_get(outputBitDepth);
> -    if (!api)
> -    {
> -        x265_log(NULL, X265_LOG_WARNING, "falling back to default bit-depth\n");
> -        api = x265_api_get(0);
> -    }
> -
> -    param = api->param_alloc();
> -    if (!param)
> -    {
> -        x265_log(NULL, X265_LOG_ERROR, "param alloc failed\n");
> -        return true;
> +            api->param_free(param);
> +            exit(1);
> +        }
>      }
>  
>      if (api->param_default_preset(param, preset, tune) < 0)
> @@ -223,7 +227,8 @@
>          {
>          case 'h':
>              showHelp(param);
> -            break;
> +            api->param_free(param);
> +            exit(1);
>  
>          case 'V':
>              printVersion(param);
> @@ -310,7 +315,11 @@
>      }
>  
>      if (argc <= 1 || help)
> +    {
>          showHelp(param);
> +        api->param_free(param);
> +        exit(1);
> +    }
>  
>      if (inputfn == NULL || outputfn == NULL)
>      {
> diff -r 9b31a8a7bd57 -r 86c12f594b89 source/x265cli.h
> --- a/source/x265cli.h	Tue May 19 19:51:56 2015 -0500
> +++ b/source/x265cli.h	Wed May 20 12:22:47 2015 +0530
> @@ -422,7 +422,6 @@
>      if (level < X265_LOG_DEBUG)
>          printf("\nUse --log-level full --help for a full listing\n");
>      printf("\n\nComplete documentation may be found at http://x265.readthedocs.org/en/default/cli.html\n");
> -    exit(1);
>  }
>  
>  #ifdef __cplusplus
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel

-- 
Steve Borho


More information about the x265-devel mailing list