From d7b1ea66e8a81a77e1da13116e913b4c5261fde7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Mon, 15 Dec 2014 15:15:41 -0500 Subject: [PATCH] Fix: Check integer signedness in packet header when auto-populating MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérémie Galarneau --- formats/ctf/ir/stream.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/formats/ctf/ir/stream.c b/formats/ctf/ir/stream.c index 32930602..45f875ff 100644 --- a/formats/ctf/ir/stream.c +++ b/formats/ctf/ir/stream.c @@ -629,6 +629,7 @@ int set_structure_field_integer(struct bt_ctf_field *structure, char *name, uint64_t value) { int ret = 0; + struct bt_ctf_field_type *field_type = NULL; struct bt_ctf_field *integer = bt_ctf_field_structure_get_field(structure, name); @@ -648,8 +649,31 @@ int set_structure_field_integer(struct bt_ctf_field *structure, char *name, goto end; } - ret = bt_ctf_field_unsigned_integer_set_value(integer, value); + field_type = bt_ctf_field_get_type(integer); + /* Something is serioulsly wrong */ + assert(field_type); + if (bt_ctf_field_type_get_type_id(field_type) != CTF_TYPE_INTEGER) { + /* + * The user most likely meant for us to populate this field + * automatically. However, we can only do this if the field + * is an integer. Return an error. + */ + ret = -1; + goto end; + } + + if (bt_ctf_field_type_integer_get_signed(field_type)) { + ret = bt_ctf_field_signed_integer_set_value(integer, + (int64_t) value); + } else { + ret = bt_ctf_field_unsigned_integer_set_value(integer, value); + } end: - bt_ctf_field_put(integer); + if (integer) { + bt_ctf_field_put(integer); + } + if (field_type) { + bt_ctf_field_type_put(field_type); + } return ret; } -- 2.34.1