X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=src%2Fcommon%2Fevent-field-value.c;h=2dd1947c2eaaf5cbb10763423bfb786b779cb8cc;hb=95671f5349e87cdd2ea6cb47243608e9368ab8d5;hp=b571f6246430ad7ba667b9d24c15a519fc7b7d31;hpb=7c920b632d63ffd82074430d77862176e0fc477c;p=lttng-tools.git diff --git a/src/common/event-field-value.c b/src/common/event-field-value.c index b571f6246..2dd1947c2 100644 --- a/src/common/event-field-value.c +++ b/src/common/event-field-value.c @@ -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; } @@ -387,13 +395,19 @@ lttng_event_field_value_unsigned_int_get_value( parent)->val; break; case LTTNG_EVENT_FIELD_VALUE_TYPE_UNSIGNED_ENUM: - *val = container_of( - container_of(field_val, - const struct lttng_event_field_value_enum, - parent), - const struct lttng_event_field_value_enum_uint, - parent)->val; + { + const struct lttng_event_field_value_enum *field_val_enum = container_of( + field_val, + const struct lttng_event_field_value_enum, + parent); + const struct lttng_event_field_value_enum_uint + *field_val_enum_uint = container_of( + field_val_enum, + const struct lttng_event_field_value_enum_uint, + parent); + *val = field_val_enum_uint->val; break; + } default: status = LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID; goto end; @@ -423,13 +437,19 @@ lttng_event_field_value_signed_int_get_value( parent)->val; break; case LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_ENUM: - *val = container_of( - container_of(field_val, - const struct lttng_event_field_value_enum, - parent), - const struct lttng_event_field_value_enum_int, - parent)->val; + { + const struct lttng_event_field_value_enum *field_val_enum = container_of( + field_val, + const struct lttng_event_field_value_enum, + parent); + const struct lttng_event_field_value_enum_int + *field_val_enum_uint = container_of( + field_val_enum, + const struct lttng_event_field_value_enum_int, + parent); + *val = field_val_enum_uint->val; break; + } default: status = LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID; goto end;