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);
header_view = lttng_buffer_view_from_view(
buffer_view, 0, sizeof(*header));
- if (!header_view.data) {
+ if (!lttng_buffer_view_is_valid(&header_view)) {
goto error;
}
+
offset = header_view.size;
header = (typeof(header)) header_view.data;
value_view = lttng_buffer_view_from_view(
buffer_view, offset, sizeof(*value_comm));
- if (!value_view.data) {
+ if (!lttng_buffer_view_is_valid(&value_view)) {
goto error;
}
value_name_view = lttng_buffer_view_from_view(
buffer_view, offset,
value_comm->value.name_len);
+ if (!lttng_buffer_view_is_valid(&value_name_view)) {
+ goto error;
+ }
+
offset += value_name_view.size;
}
+
ret_code = process_attr_value_from_comm(domain, process_attr,
type, &value_comm->value.integral,
&value_name_view, &value);