Fix: Handle empty string in lttng_event_field_value_string_create_with_size
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 26 Sep 2022 17:36:38 +0000 (13:36 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 30 Sep 2022 19:12:36 +0000 (15:12 -0400)
When using the event notification capture API, empty strings are
represented by a NULL pointer with a size=0 in the msgpack object.
The NULL pointer is unexpected, which triggers an assertion in
lttng_event_field_value_string_create_with_size.

Fix this by duplicating an empty string ("") when a size=0 is
encountered. This ensures that users of the API don't end up with an
unexpected NULL pointer. Indeed, the sample program notif-app.c in the
LTTng website documentation does not expect a NULL pointer.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I7c3a839dbbeeb95a1b3bf6ddc3205a2f6b4538e3

src/common/event-field-value.c

index b57c7c53e206fc249de919575583e04234aef923..15ff36f4b2be3923b4ef5fe4c1568fb58d3bd8fd 100644 (file)
@@ -190,8 +190,16 @@ struct lttng_event_field_value *lttng_event_field_value_string_create_with_size(
                goto error;
        }
 
-       assert(val);
-       field_val->val = strndup(val, size);
+       if (size) {
+               assert(val);
+               field_val->val = strndup(val, size);
+       } else {
+               /*
+                * User code do not expect a NULL string pointer.
+                * Populate with an empty string when length is 0.
+                */
+               field_val->val = strdup("");
+       }
        if (!field_val->val) {
                goto error;
        }
This page took 0.028918 seconds and 5 git commands to generate.