diff options
author | João Valverde <j@v6e.pt> | 2022-12-06 19:27:24 +0000 |
---|---|---|
committer | João Valverde <j@v6e.pt> | 2022-12-09 19:17:05 +0000 |
commit | a74027ad00c24e3ae2d7855af9195fe2609c1a93 (patch) | |
tree | 38034f7290b3a631a2d161d59f2400bb65892f0c /wiretap/pcapng.c | |
parent | c64eaf87afa65b01fe73a8befdc5716aee34e876 (diff) |
wiretap: Validate UTF-8 encoding for pcapng
Validate UTF-8 encoding for pcapng string options. To
avoid two unnecessary memory allocations for invalid strings and
make the code cleaner a new wtap_block_add_string_option_owned()
function is used.
Add UTF-8 debug check for wiretap API.
Fixes #18703.
Diffstat (limited to 'wiretap/pcapng.c')
-rw-r--r-- | wiretap/pcapng.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/wiretap/pcapng.c b/wiretap/pcapng.c index 6f6b977e99..4a51d4a499 100644 --- a/wiretap/pcapng.c +++ b/wiretap/pcapng.c @@ -700,7 +700,17 @@ void pcapng_process_string_option(wtapng_block_t *wblock, guint16 option_code, guint16 option_length, const guint8 *option_content) { - wtap_block_add_string_option(wblock->block, option_code, (const char *)option_content, option_length); + const char *opt = (const char *)option_content; + size_t optlen = option_length; + char *str; + + /* Validate UTF-8 encoding. */ + if (g_utf8_validate(opt, optlen, NULL)) + str = g_strndup(opt, optlen); + else + str = g_utf8_make_valid(opt, optlen); + + wtap_block_add_string_option_owned(wblock->block, option_code, str); } void |