Mirror of the lttng-dev mailing list
 help / color / mirror / Atom feed
* [lttng-dev] [PATCH babeltrace 1/2] Fix ctf-writer: Quote strings provided as enumeration mappings
@ 2013-11-28 20:46 Jérémie Galarneau
  2013-11-28 20:46 ` [lttng-dev] [PATCH babeltrace 2/2] Test: Validate that enumeration mapping strings are properly escaped Jérémie Galarneau
  0 siblings, 1 reply; 3+ messages in thread
From: Jérémie Galarneau @ 2013-11-28 20:46 UTC (permalink / raw)


Signed-off-by: J?r?mie Galarneau <jeremie.galarneau at efficios.com>
---
 formats/ctf/writer/event-types.c | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/formats/ctf/writer/event-types.c b/formats/ctf/writer/event-types.c
index 4ed9fed..7f7fa76 100644
--- a/formats/ctf/writer/event-types.c
+++ b/formats/ctf/writer/event-types.c
@@ -33,6 +33,7 @@
 #include <babeltrace/endian.h>
 #include <float.h>
 #include <inttypes.h>
+#include <stdlib.h>
 
 struct range_overlap_query {
 	int64_t range_start, range_end;
@@ -385,6 +386,7 @@ int bt_ctf_field_type_enumeration_add_mapping(
 	struct enumeration_mapping *mapping;
 	struct bt_ctf_field_type_enumeration *enumeration;
 	struct range_overlap_query query;
+	char *escaped_string;
 
 	if (!type || (type->declaration->id != CTF_TYPE_ENUM) ||
 		type->frozen ||
@@ -393,12 +395,18 @@ int bt_ctf_field_type_enumeration_add_mapping(
 		goto end;
 	}
 
-	if (validate_identifier(string)) {
+	if (!string || strlen(string) == 0) {
 		ret = -1;
 		goto end;
 	}
 
-	mapping_name = g_quark_from_string(string);
+	escaped_string = g_strescape(string, NULL);
+	if (!escaped_string) {
+		ret = -1;
+		goto end;
+	}
+
+	mapping_name = g_quark_from_string(escaped_string);
 	query = (struct range_overlap_query) { .range_start = range_start,
 		.range_end = range_end,
 		.mapping_name = mapping_name,
@@ -410,18 +418,20 @@ int bt_ctf_field_type_enumeration_add_mapping(
 	g_ptr_array_foreach(enumeration->entries, check_ranges_overlap, &query);
 	if (query.overlaps) {
 		ret = -1;
-		goto end;
+		goto error_free;
 	}
 
 	mapping = g_new(struct enumeration_mapping, 1);
 	if (!mapping) {
 		ret = -1;
-		goto end;
+		goto error_free;
 	}
 
 	*mapping = (struct enumeration_mapping) {.range_start = range_start,
 		.range_end = range_end, .string = mapping_name};
 	g_ptr_array_add(enumeration->entries, mapping);
+error_free:
+	free(escaped_string);
 end:
 	return ret;
 }
@@ -1200,12 +1210,13 @@ int bt_ctf_field_type_enumeration_serialize(struct bt_ctf_field_type *type,
 			enumeration->entries->pdata[entry];
 
 		if (mapping->range_start == mapping->range_end) {
-			g_string_append_printf(context->string, "%s = %" PRId64,
+			g_string_append_printf(context->string,
+				"\"%s\" = %" PRId64,
 				g_quark_to_string(mapping->string),
 				mapping->range_start);
 		} else {
 			g_string_append_printf(context->string,
-				"%s = %" PRId64 " ... %" PRId64,
+				"\"%s\" = %" PRId64 " ... %" PRId64,
 				g_quark_to_string(mapping->string),
 				mapping->range_start, mapping->range_end);
 		}
-- 
1.8.4.2




^ permalink raw reply	[flat|nested] 3+ messages in thread

* [lttng-dev] [PATCH babeltrace 2/2] Test: Validate that enumeration mapping strings are properly escaped
  2013-11-28 20:46 [lttng-dev] [PATCH babeltrace 1/2] Fix ctf-writer: Quote strings provided as enumeration mappings Jérémie Galarneau
@ 2013-11-28 20:46 ` Jérémie Galarneau
  2013-11-29  6:06   ` Mathieu Desnoyers
  0 siblings, 1 reply; 3+ messages in thread
From: Jérémie Galarneau @ 2013-11-28 20:46 UTC (permalink / raw)


Signed-off-by: J?r?mie Galarneau <jeremie.galarneau at efficios.com>
---
 tests/lib/test_ctf_writer.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/tests/lib/test_ctf_writer.c b/tests/lib/test_ctf_writer.c
index d7f7db7..0927a32 100644
--- a/tests/lib/test_ctf_writer.c
+++ b/tests/lib/test_ctf_writer.c
@@ -254,13 +254,30 @@ void append_simple_event(struct bt_ctf_stream_class *stream_class,
 		bt_ctf_field_type_integer_create(12);
 	struct bt_ctf_field_type *float_type =
 		bt_ctf_field_type_floating_point_create();
+	struct bt_ctf_field_type *enum_type =
+		bt_ctf_field_type_enumeration_create(uint_12_type);
 	struct bt_ctf_event *simple_event;
 	struct bt_ctf_field *integer_field;
 	struct bt_ctf_field *float_field;
+	struct bt_ctf_field *enum_field;
+	struct bt_ctf_field *enum_container_field;
 
 	bt_ctf_field_type_set_alignment(float_type, 32);
 	bt_ctf_field_type_floating_point_set_exponent_digits(float_type, 11);
 	bt_ctf_field_type_floating_point_set_mantissa_digits(float_type, 53);
+
+	ok(bt_ctf_field_type_enumeration_add_mapping(enum_type,
+		"escaping; \"test\"", 0, 0) == 0,
+		"Accept enumeration mapping strings containing quotes");
+	ok(bt_ctf_field_type_enumeration_add_mapping(enum_type,
+		"\tanother \'escaping\'\n test\"", 1, 4) == 0,
+		"Accept enumeration mapping strings containing special characters");
+	ok(bt_ctf_field_type_enumeration_add_mapping(enum_type,
+		"event clock int float", 5, 22) == 0,
+		"Accept enumeration mapping strings containing reserved keywords");
+	ok(bt_ctf_event_class_add_field(simple_event_class, enum_type,
+		"enum_field") == 0, "Add enumeration field to event");
+
 	ok(uint_12_type, "Create an unsigned integer type");
 	bt_ctf_event_class_add_field(simple_event_class, uint_12_type,
 		"integer_field");
@@ -281,6 +298,13 @@ void append_simple_event(struct bt_ctf_stream_class *stream_class,
 
 	float_field = bt_ctf_event_get_payload(simple_event, "float_field");
 	bt_ctf_field_floating_point_set_value(float_field, 3.1415);
+	enum_field = bt_ctf_field_create(enum_type);
+	enum_container_field = bt_ctf_field_enumeration_get_container(
+		enum_field);
+	ok(bt_ctf_field_unsigned_integer_set_value(
+		enum_container_field, 1) == 0,
+		"Set enumeration container value");
+	bt_ctf_event_set_payload(simple_event, "enum_field", enum_field);
 
 	ok(bt_ctf_clock_set_time(clock, current_time) == 0, "Set clock time");
 
@@ -294,8 +318,11 @@ void append_simple_event(struct bt_ctf_stream_class *stream_class,
 	bt_ctf_event_put(simple_event);
 	bt_ctf_field_type_put(uint_12_type);
 	bt_ctf_field_type_put(float_type);
+	bt_ctf_field_type_put(enum_type);
 	bt_ctf_field_put(integer_field);
 	bt_ctf_field_put(float_field);
+	bt_ctf_field_put(enum_field);
+	bt_ctf_field_put(enum_container_field);
 }
 
 void append_complex_event(struct bt_ctf_stream_class *stream_class,
-- 
1.8.4.2




^ permalink raw reply	[flat|nested] 3+ messages in thread

* [lttng-dev] [PATCH babeltrace 2/2] Test: Validate that enumeration mapping strings are properly escaped
  2013-11-28 20:46 ` [lttng-dev] [PATCH babeltrace 2/2] Test: Validate that enumeration mapping strings are properly escaped Jérémie Galarneau
@ 2013-11-29  6:06   ` Mathieu Desnoyers
  0 siblings, 0 replies; 3+ messages in thread
From: Mathieu Desnoyers @ 2013-11-29  6:06 UTC (permalink / raw)


Both patches merged, thanks!

Mathieu

----- Original Message -----
> From: "J?r?mie Galarneau" <jeremie.galarneau@efficios.com>
> To: lttng-dev at lists.lttng.org
> Sent: Thursday, November 28, 2013 9:46:41 PM
> Subject: [lttng-dev] [PATCH babeltrace 2/2] Test: Validate that enumeration	mapping strings are properly escaped
> 
> Signed-off-by: J?r?mie Galarneau <jeremie.galarneau at efficios.com>
> ---
>  tests/lib/test_ctf_writer.c | 27 +++++++++++++++++++++++++++
>  1 file changed, 27 insertions(+)
> 
> diff --git a/tests/lib/test_ctf_writer.c b/tests/lib/test_ctf_writer.c
> index d7f7db7..0927a32 100644
> --- a/tests/lib/test_ctf_writer.c
> +++ b/tests/lib/test_ctf_writer.c
> @@ -254,13 +254,30 @@ void append_simple_event(struct bt_ctf_stream_class
> *stream_class,
>  		bt_ctf_field_type_integer_create(12);
>  	struct bt_ctf_field_type *float_type =
>  		bt_ctf_field_type_floating_point_create();
> +	struct bt_ctf_field_type *enum_type =
> +		bt_ctf_field_type_enumeration_create(uint_12_type);
>  	struct bt_ctf_event *simple_event;
>  	struct bt_ctf_field *integer_field;
>  	struct bt_ctf_field *float_field;
> +	struct bt_ctf_field *enum_field;
> +	struct bt_ctf_field *enum_container_field;
>  
>  	bt_ctf_field_type_set_alignment(float_type, 32);
>  	bt_ctf_field_type_floating_point_set_exponent_digits(float_type, 11);
>  	bt_ctf_field_type_floating_point_set_mantissa_digits(float_type, 53);
> +
> +	ok(bt_ctf_field_type_enumeration_add_mapping(enum_type,
> +		"escaping; \"test\"", 0, 0) == 0,
> +		"Accept enumeration mapping strings containing quotes");
> +	ok(bt_ctf_field_type_enumeration_add_mapping(enum_type,
> +		"\tanother \'escaping\'\n test\"", 1, 4) == 0,
> +		"Accept enumeration mapping strings containing special characters");
> +	ok(bt_ctf_field_type_enumeration_add_mapping(enum_type,
> +		"event clock int float", 5, 22) == 0,
> +		"Accept enumeration mapping strings containing reserved keywords");
> +	ok(bt_ctf_event_class_add_field(simple_event_class, enum_type,
> +		"enum_field") == 0, "Add enumeration field to event");
> +
>  	ok(uint_12_type, "Create an unsigned integer type");
>  	bt_ctf_event_class_add_field(simple_event_class, uint_12_type,
>  		"integer_field");
> @@ -281,6 +298,13 @@ void append_simple_event(struct bt_ctf_stream_class
> *stream_class,
>  
>  	float_field = bt_ctf_event_get_payload(simple_event, "float_field");
>  	bt_ctf_field_floating_point_set_value(float_field, 3.1415);
> +	enum_field = bt_ctf_field_create(enum_type);
> +	enum_container_field = bt_ctf_field_enumeration_get_container(
> +		enum_field);
> +	ok(bt_ctf_field_unsigned_integer_set_value(
> +		enum_container_field, 1) == 0,
> +		"Set enumeration container value");
> +	bt_ctf_event_set_payload(simple_event, "enum_field", enum_field);
>  
>  	ok(bt_ctf_clock_set_time(clock, current_time) == 0, "Set clock time");
>  
> @@ -294,8 +318,11 @@ void append_simple_event(struct bt_ctf_stream_class
> *stream_class,
>  	bt_ctf_event_put(simple_event);
>  	bt_ctf_field_type_put(uint_12_type);
>  	bt_ctf_field_type_put(float_type);
> +	bt_ctf_field_type_put(enum_type);
>  	bt_ctf_field_put(integer_field);
>  	bt_ctf_field_put(float_field);
> +	bt_ctf_field_put(enum_field);
> +	bt_ctf_field_put(enum_container_field);
>  }
>  
>  void append_complex_event(struct bt_ctf_stream_class *stream_class,
> --
> 1.8.4.2
> 
> 
> _______________________________________________
> lttng-dev mailing list
> lttng-dev at lists.lttng.org
> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
> 

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-11-29  6:06 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-11-28 20:46 [lttng-dev] [PATCH babeltrace 1/2] Fix ctf-writer: Quote strings provided as enumeration mappings Jérémie Galarneau
2013-11-28 20:46 ` [lttng-dev] [PATCH babeltrace 2/2] Test: Validate that enumeration mapping strings are properly escaped Jérémie Galarneau
2013-11-29  6:06   ` Mathieu Desnoyers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox