aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap/pcapng.c
diff options
context:
space:
mode:
authorJoão Valverde <j@v6e.pt>2022-12-06 19:27:24 +0000
committerJoão Valverde <j@v6e.pt>2022-12-09 19:17:05 +0000
commita74027ad00c24e3ae2d7855af9195fe2609c1a93 (patch)
tree38034f7290b3a631a2d161d59f2400bb65892f0c /wiretap/pcapng.c
parentc64eaf87afa65b01fe73a8befdc5716aee34e876 (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.c12
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