struct process_attr_tracker_values_comm_header {
uint32_t count;
-};
+} LTTNG_PACKED;
struct process_attr_tracker_value_comm {
/* enum lttng_process_attr_value_type */
/* Includes the '\0' terminator. */
uint32_t name_len;
} value;
-};
+} LTTNG_PACKED;
#define GET_INTEGRAL_COMM_VALUE(value_ptr, as_type) \
((as_type)(is_signed(as_type) ? (value_ptr)->u._signed : \
name = strdup(value_view->data);
if (!name) {
ret = LTTNG_ERR_NOMEM;
+ goto error;
}
}
}
/* Only expect a payload for name value types. */
- if (is_value_type_name(value_type) && value_view->size == 0) {
+ if (is_value_type_name(value_type) &&
+ (!value_view || value_view->size == 0)) {
ret = LTTNG_ERR_INVALID_PROTOCOL;
goto error;
- } else if (!is_value_type_name(value_type) && value_view->size != 0) {
+ } else if (!is_value_type_name(value_type) && value_view &&
+ value_view->size != 0) {
ret = LTTNG_ERR_INVALID_PROTOCOL;
goto error;
}
*_value = value;
value = NULL;
+ free(name);
return LTTNG_OK;
error:
free(name);