You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-04 22:03:09 +02:00
fftools/avtextformat: Re-use BPrint in loop
Instead of initializing a new BPrint in case of UTF decode error, re-use the same BPrint struct and just clear it for each iteration. Reviewed-by: Stefano Sabatini <stefasab@gmail.com> Signed-off-by: softworkz <softworkz@hotmail.com>
This commit is contained in:
@ -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)
|
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 dstbuf;
|
||||||
|
AVBPrint invalid_seq;
|
||||||
int invalid_chars_nb = 0, ret = 0;
|
int invalid_chars_nb = 0, ret = 0;
|
||||||
|
|
||||||
|
*dstp = NULL;
|
||||||
av_bprint_init(&dstbuf, 0, AV_BPRINT_SIZE_UNLIMITED);
|
av_bprint_init(&dstbuf, 0, AV_BPRINT_SIZE_UNLIMITED);
|
||||||
|
av_bprint_init(&invalid_seq, 0, AV_BPRINT_SIZE_UNLIMITED);
|
||||||
|
|
||||||
endp = src + strlen(src);
|
endp = srcp + strlen(src);
|
||||||
for (p = src; *p;) {
|
for (p = srcp; *p;) {
|
||||||
uint32_t code;
|
int32_t code;
|
||||||
int invalid = 0;
|
int invalid = 0;
|
||||||
const uint8_t *p0 = p;
|
const uint8_t *p0 = p;
|
||||||
|
|
||||||
if (av_utf8_decode(&code, &p, endp, tctx->string_validation_utf8_flags) < 0) {
|
if (av_utf8_decode(&code, &p, endp, tctx->string_validation_utf8_flags) < 0) {
|
||||||
AVBPrint bp;
|
|
||||||
av_bprint_init(&bp, 0, AV_BPRINT_SIZE_AUTOMATIC);
|
av_bprint_clear(&invalid_seq);
|
||||||
bprint_bytes(&bp, p0, p-p0);
|
|
||||||
av_log(tctx, AV_LOG_DEBUG,
|
bprint_bytes(&invalid_seq, p0, p - p0);
|
||||||
"Invalid UTF-8 sequence %s found in string '%s'\n", bp.str, src);
|
|
||||||
|
av_log(tctx, AV_LOG_DEBUG, "Invalid UTF-8 sequence '%s' found in string '%s'\n", invalid_seq.str, src);
|
||||||
invalid = 1;
|
invalid = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -358,6 +362,7 @@ static inline int validate_string(AVTextFormatContext *tctx, char **dstp, const
|
|||||||
|
|
||||||
end:
|
end:
|
||||||
av_bprint_finalize(&dstbuf, dstp);
|
av_bprint_finalize(&dstbuf, dstp);
|
||||||
|
av_bprint_finalize(&invalid_seq, NULL);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user