On date Sunday 2025-05-04 02:57:16 +0000, softworkz wrote:
> From: softworkz <softwo...@hotmail.com>
> 

> Instead of initializing a new BPrint in each iteration of
> the loop,

a new BPrint in case of UTF decode error

> re-use the same BPrint struct and just clear it
> for each iteration.
> 
> Signed-off-by: softworkz <softwo...@hotmail.com>
> ---
>  fftools/textformat/avtextformat.c | 23 ++++++++++++++---------
>  1 file changed, 14 insertions(+), 9 deletions(-)
> 
> diff --git a/fftools/textformat/avtextformat.c 
> b/fftools/textformat/avtextformat.c
> index 1cd9555ca8..b2c3aa3fc7 100644
> --- a/fftools/textformat/avtextformat.c
> +++ b/fftools/textformat/avtextformat.c
> @@ -311,24 +311,28 @@ void avtext_print_integer(AVTextFormatContext *tctx, 
> const char *key, int64_t va
>  
>  static inline int validate_string(AVTextFormatContext *tctx, char **dstp, 
> const char *src)
>  {
> -    const uint8_t *p, *endp;
> +    const uint8_t *p, *endp, *srcp = (const uint8_t *)src;
>      AVBPrint dstbuf;

> +    AVBPrint bp_invalid_seq;

nit: you can discard bp_ for consistency with dstbuf

>      int invalid_chars_nb = 0, ret = 0;
>  
> +    *dstp = NULL;
>      av_bprint_init(&dstbuf, 0, AV_BPRINT_SIZE_UNLIMITED);
> +    av_bprint_init(&bp_invalid_seq, 0, AV_BPRINT_SIZE_UNLIMITED);
>  
> -    endp = src + strlen(src);
> -    for (p = src; *p;) {
> -        uint32_t code;
> +    endp = srcp + strlen(src);
> +    for (p = srcp; *p;) {
> +        int32_t code;
>          int invalid = 0;
>          const uint8_t *p0 = p;
>  
>          if (av_utf8_decode(&code, &p, endp, 
> tctx->string_validation_utf8_flags) < 0) {
> -            AVBPrint bp;
> -            av_bprint_init(&bp, 0, AV_BPRINT_SIZE_AUTOMATIC);
> -            bprint_bytes(&bp, p0, p-p0);
> -            av_log(tctx, AV_LOG_DEBUG,
> -                   "Invalid UTF-8 sequence %s found in string '%s'\n", 
> bp.str, src);
> +
> +            av_bprint_clear(&bp_invalid_seq);
> +
> +            bprint_bytes(&bp_invalid_seq, p0, p - p0);
> +

> +            av_log(tctx, AV_LOG_DEBUG, "Invalid UTF-8 sequence %s found in 
> string '%s'\n", bp_invalid_seq.str, src);

while at it, also quote the invalid string

>              invalid = 1;
>          }
>  
> @@ -358,6 +362,7 @@ static inline int validate_string(AVTextFormatContext 
> *tctx, char **dstp, const
>  
>  end:
>      av_bprint_finalize(&dstbuf, dstp);
> +    av_bprint_finalize(&bp_invalid_seq, NULL);
>      return ret;
>  }

Should be good otherwise.
_______________________________________________
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