MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / validate_string

Function validate_string

fftools/textformat/avtextformat.c:307–362  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

305}
306
307static inline int validate_string(AVTextFormatContext *tctx, char **dstp, const char *src)
308{
309 const uint8_t *p, *endp, *srcp = (const uint8_t *)src;
310 AVBPrint dstbuf;
311 AVBPrint invalid_seq;
312 int invalid_chars_nb = 0, ret = 0;
313
314 *dstp = NULL;
315 av_bprint_init(&dstbuf, 0, AV_BPRINT_SIZE_UNLIMITED);
316 av_bprint_init(&invalid_seq, 0, AV_BPRINT_SIZE_UNLIMITED);
317
318 endp = srcp + strlen(src);
319 for (p = srcp; *p;) {
320 int32_t code;
321 int invalid = 0;
322 const uint8_t *p0 = p;
323
324 if (av_utf8_decode(&code, &p, endp, tctx->string_validation_utf8_flags) < 0) {
325
326 av_bprint_clear(&invalid_seq);
327
328 bprint_bytes(&invalid_seq, p0, p - p0);
329
330 av_log(tctx, AV_LOG_DEBUG, "Invalid UTF-8 sequence '%s' found in string '%s'\n", invalid_seq.str, src);
331 invalid = 1;
332 }
333
334 if (invalid) {
335 invalid_chars_nb++;
336
337 switch (tctx->string_validation) {
338 case AV_TEXTFORMAT_STRING_VALIDATION_FAIL:
339 av_log(tctx, AV_LOG_ERROR, "Invalid UTF-8 sequence found in string '%s'\n", src);
340 ret = AVERROR_INVALIDDATA;
341 goto end;
342
343 case AV_TEXTFORMAT_STRING_VALIDATION_REPLACE:
344 av_bprintf(&dstbuf, "%s", tctx->string_validation_replacement);
345 break;
346 }
347 }
348
349 if (!invalid || tctx->string_validation == AV_TEXTFORMAT_STRING_VALIDATION_IGNORE)
350 av_bprint_append_data(&dstbuf, p0, p-p0);
351 }
352
353 if (invalid_chars_nb && tctx->string_validation == AV_TEXTFORMAT_STRING_VALIDATION_REPLACE)
354 av_log(tctx, AV_LOG_WARNING,
355 "%d invalid UTF-8 sequence(s) found in string '%s', replaced with '%s'\n",
356 invalid_chars_nb, src, tctx->string_validation_replacement);
357
358end:
359 av_bprint_finalize(&dstbuf, dstp);
360 av_bprint_finalize(&invalid_seq, NULL);
361 return ret;
362}
363
364struct unit_value {

Callers 1

avtext_print_stringFunction · 0.85

Calls 8

av_bprint_initFunction · 0.85
av_utf8_decodeFunction · 0.85
av_bprint_clearFunction · 0.85
bprint_bytesFunction · 0.85
av_logFunction · 0.85
av_bprintfFunction · 0.85
av_bprint_append_dataFunction · 0.85
av_bprint_finalizeFunction · 0.85

Tested by

no test coverage detected