From: Philippe Proulx Date: Thu, 22 Jun 2017 15:17:42 +0000 (-0400) Subject: lib/ctf-ir/trace.c: validate PH `packet_seq_num` field X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=708ab211381d2eb51ea78ca2af6b61ebee7c6bd9 lib/ctf-ir/trace.c: validate PH `packet_seq_num` field Must be an unsigned integer field if it exists. Signed-off-by: Philippe Proulx Signed-off-by: Jérémie Galarneau --- 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: