On date Friday 2025-04-25 23:30:57 +0000, softworkz wrote:
> From: softworkz <softwo...@hotmail.com>
> 
> Perform multiple improvements to increase code robustness.
> In particular:
> - favor unsigned counters for loops
> - add missing checks
> - avoid possible leaks
> - move variable declarations to inner scopes when feasible
> - provide explicit type-casting when needed
> 
> Signed-off-by: softworkz <softwo...@hotmail.com>
> ---
>  fftools/textformat/avtextformat.c | 85 ++++++++++++++++++++-----------
>  fftools/textformat/avtextformat.h |  6 +--
>  fftools/textformat/tf_default.c   |  8 ++-
>  fftools/textformat/tf_ini.c       |  2 +-
>  fftools/textformat/tf_json.c      | 17 ++++---
>  fftools/textformat/tf_xml.c       |  3 --
>  fftools/textformat/tw_avio.c      | 11 +++-
>  7 files changed, 83 insertions(+), 49 deletions(-)
> 
> diff --git a/fftools/textformat/avtextformat.c 
> b/fftools/textformat/avtextformat.c
> index 74d179c516..1939a1f739 100644
> --- a/fftools/textformat/avtextformat.c
> +++ b/fftools/textformat/avtextformat.c
> @@ -93,9 +93,8 @@ static const AVClass textcontext_class = {
>  
>  static void bprint_bytes(AVBPrint *bp, const uint8_t *ubuf, size_t ubuf_size)
>  {
> -    int i;
>      av_bprintf(bp, "0X");
> -    for (i = 0; i < ubuf_size; i++)
> +    for (unsigned i = 0; i < ubuf_size; i++)
>          av_bprintf(bp, "%02X", ubuf[i]);
>  }
>  
> @@ -137,6 +136,9 @@ int avtext_context_open(AVTextFormatContext **ptctx, 
> const AVTextFormatter *form
>      AVTextFormatContext *tctx;
>      int i, ret = 0;
>  

> +    if (!ptctx || !formatter)
> +        return AVERROR(EINVAL);

assert0?

> +
>      if (!(tctx = av_mallocz(sizeof(AVTextFormatContext)))) {
>          ret = AVERROR(ENOMEM);
>          goto fail;
> @@ -209,25 +211,26 @@ int avtext_context_open(AVTextFormatContext **ptctx, 
> const AVTextFormatter *form
>                      av_log(NULL, AV_LOG_ERROR, " %s", n);
>                  av_log(NULL, AV_LOG_ERROR, "\n");
>              }
> -            return ret;
> +            goto fail;
>          }
>  
>      /* validate replace string */
>      {
> -        const uint8_t *p = tctx->string_validation_replacement;
> -        const uint8_t *endp = p + strlen(p);
> +        const uint8_t *p = (uint8_t *)tctx->string_validation_replacement;
> +        const uint8_t *endp = p + strlen((const char *)p);
>          while (*p) {
>              const uint8_t *p0 = p;
>              int32_t code;
>              ret = av_utf8_decode(&code, &p, endp, 
> tctx->string_validation_utf8_flags);
>              if (ret < 0) {

>                  AVBPrint bp;
> -                av_bprint_init(&bp, 0, AV_BPRINT_SIZE_AUTOMATIC);
> +                av_bprint_init(&bp, 0, AV_BPRINT_SIZE_UNLIMITED);
>                  bprint_bytes(&bp, p0, p - p0),
>                      av_log(tctx, AV_LOG_ERROR,
>                             "Invalid UTF8 sequence %s found in string 
> validation replace '%s'\n",
>                             bp.str, tctx->string_validation_replacement);
> -                return ret;
> +                av_bprint_finalize(&bp, NULL);

I see no advantage in this, since it's adding dynamic allocation and
the need to free which was previously not needed

> +                goto fail;
>              }
>          }
>      }
> @@ -255,6 +258,9 @@ static const char unit_bit_per_second_str[] = "bit/s";
>  

>  void avtext_print_section_header(AVTextFormatContext *tctx, const void 
> *data, int section_id)
>  {
> +    if (section_id < 0 || section_id >= tctx->nb_sections)
> +        return;

Given this is a check on the input data, we should probably make it
fail with a log message, meaning we should also check the return value
from the callee.

Given this is not a public API I'm not against the assert though.

[...]
>  int avtextwriter_create_file(AVTextWriterContext **pwctx, const char 
> *output_filename)
>  {
> +    if (!output_filename || !output_filename[0]) {
> +        av_log(NULL, AV_LOG_ERROR, "The output_filename cannot be NULL or 
> empty\n");
> +        return AVERROR(EINVAL);
> +    }
> +
>      IOWriterContext *ctx;
>      int ret;

nit here and below: move declarations before actual code for stylistic 
consistency

[...]
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to