* [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