From 708ab211381d2eb51ea78ca2af6b61ebee7c6bd9 Mon Sep 17 00:00:00 2001 From: Philippe Proulx Date: Thu, 22 Jun 2017 11:17:42 -0400 Subject: [PATCH] lib/ctf-ir/trace.c: validate PH `packet_seq_num` field MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Must be an unsigned integer field if it exists. Signed-off-by: Philippe Proulx Signed-off-by: Jérémie Galarneau --- lib/ctf-ir/trace.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/lib/ctf-ir/trace.c b/lib/ctf-ir/trace.c index 634a71ef..110c20d4 100644 --- a/lib/ctf-ir/trace.c +++ b/lib/ctf-ir/trace.c @@ -793,6 +793,30 @@ bool packet_header_field_type_is_valid(struct bt_ctf_trace *trace, BT_PUT(field_type); } + /* + * If there's a `packet_seq_num` field, it must be an unsigned + * integer field type. + */ + field_type = bt_ctf_field_type_structure_get_field_type_by_name( + packet_header_type, "packet_seq_num"); + if (field_type) { + if (!bt_ctf_field_type_is_integer(field_type)) { + BT_LOGW("Invalid packet header field type: `packet_seq_num` field must be an integer field type: " + "stream-id-ft-addr=%p, packet-seq-num-ft-id=%s", + field_type, + bt_ctf_field_type_id_string(field_type->id)); + goto invalid; + } + + if (bt_ctf_field_type_integer_is_signed(field_type)) { + BT_LOGW("Invalid packet header field type: `packet_seq_num` field must be an unsigned integer field type: " + "packet-seq-num-ft-addr=%p", field_type); + goto invalid; + } + + BT_PUT(field_type); + } + goto end; invalid: -- 2.34.1