[FFmpeg-devel] [PATCH v10 05/15] fftools/avtextformat: Re-use BPrint in loop
Stefano Sabatini
stefasab at gmail.com
Thu May 8 02:58:28 EEST 2025
On date Sunday 2025-05-04 02:57:16 +0000, softworkz wrote:
> From: softworkz <softworkz at 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 <softworkz at 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.
More information about the ffmpeg-devel
mailing list