From a2fc020ee1251a8edee4a20f4107116605a29896 Mon Sep 17 00:00:00 2001 From: Jonathan Rajotte Date: Tue, 14 Sep 2021 16:10:36 -0400 Subject: [PATCH] Fix: common: error query for trigger action protocol error MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Observed issue ============== When listing a trigger with a single non-list action the CLI reports an error in the protocol resulting in an output with no error accounting for the action. $ lttng list-triggers - name: trigger0 owner uid: 1000 condition: session rotation ongoing session name: test errors: none action:notify Error: Failed to query errors of trigger 'trigger0' (owner uid: 1000): Protocol error occurred Cause ===== The `action_path` associated with the query has an index count of 0 as it should considering that the single root element action element is not a `list` object. Inside `lttng_action_path_create_from_payload` a payload view is initialized with a `len` of 0 since `header->index_count` is 0 as it should. The payload view is then validated and is considered invalid since the validation check for `len` > 0. The error then bubbles up. Solution ======== Since that the payload view is considered invalid when it is equal to zero simply handle this special case and call directly `lttng_action_path_create` with the appropriate parameter. Known drawbacks ========= None. Signed-off-by: Jonathan Rajotte Signed-off-by: Jérémie Galarneau Change-Id: I8f302c3aa78835342c665793908dc02f0a9dece4 --- src/common/actions/path.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/common/actions/path.c b/src/common/actions/path.c index 7f4955475..4ee649928 100644 --- a/src/common/actions/path.c +++ b/src/common/actions/path.c @@ -143,6 +143,13 @@ ssize_t lttng_action_path_create_from_payload( header = (typeof(header)) header_view.buffer.data; consumed_size += header_view.buffer.size; + + /* + * An action path of size 0 can exist and represents a trigger with a + * single non-list action. Handle it differently since a payload view of + * size 0 is considered invalid. + */ + if (header->index_count != 0) { const struct lttng_payload_view indexes_view = lttng_payload_view_from_view(view, @@ -161,6 +168,11 @@ ssize_t lttng_action_path_create_from_payload( if (!action_path) { goto end; } + } else { + action_path = lttng_action_path_create(NULL, 0); + if (!action_path) { + goto end; + } } ret = consumed_size; -- 2.34.1