Kouhei Sutou
null+****@clear*****
Mon Jan 27 22:21:57 JST 2014
Kouhei Sutou 2014-01-27 22:21:57 +0900 (Mon, 27 Jan 2014) New Revision: d8b716ec34c629e4f37c7eb93b8f648fd5829115 https://github.com/groonga/groonga-gobject/commit/d8b716ec34c629e4f37c7eb93b8f648fd5829115 Message: Fix a crash bug by ggrn_command_to_command_line() Modified files: groonga-gobject/ggrn-command.c test/test-command.c Modified: groonga-gobject/ggrn-command.c (+1 -1) =================================================================== --- groonga-gobject/ggrn-command.c 2014-01-27 22:21:28 +0900 (049d3f1) +++ groonga-gobject/ggrn-command.c 2014-01-27 22:21:57 +0900 (4dd322e) @@ -283,7 +283,7 @@ to_command_line_append_value(GString *command_line, const gchar *value) g_string_append_c(command_line, '"'); value_current = value; - while (value_current) { + while (*value_current) { gsize char_length; value_next = g_utf8_next_char(value_current); if (value_next) { Modified: test/test-command.c (+43 -3) =================================================================== --- test/test-command.c 2014-01-27 22:21:28 +0900 (0c34de5) +++ test/test-command.c 2014-01-27 22:21:57 +0900 (0601a4d) @@ -26,7 +26,8 @@ CUT_EXPORT void data_to_path(void); CUT_EXPORT void test_to_path(gconstpointer data); -CUT_EXPORT void test_to_command_line(void); +CUT_EXPORT void data_to_command_line(void); +CUT_EXPORT void test_to_command_line(gconstpointer data); static GGrnContext *context; static GGrnCommand *command; @@ -108,8 +109,47 @@ test_to_path(gconstpointer data) } void -test_to_command_line(void) +data_to_command_line(void) { - cut_assert_equal_string_with_free("select", +#define ADD_DATA(label, expected, arguments) \ + gcut_add_datum(label, \ + "expected", G_TYPE_STRING, expected, \ + "arguments", G_TYPE_HASH_TABLE, arguments, \ + NULL); + +#define ARGUMENTS(argument, ...) \ + gcut_hash_table_string_string_new(argument, __VA_ARGS__) + + ADD_DATA("no arguments", + "select", + NULL); + ADD_DATA("one argument", + "select --table \"Users\"", + ARGUMENTS("table", "Users", + NULL)); + ADD_DATA("two or more arguments", + "select --table \"Users\" --output_columns \"_key\" --limit \"10\"", + ARGUMENTS("table", "Users", + "output_columns", "_key", + "limit", "10", + NULL)); + ADD_DATA("escape", + "select --filter \"(1 + 2 && \\\"string\\\")\"", + ARGUMENTS("filter", "(1 + 2 && \"string\")", + NULL)); + +#undef ARGUMENTS + +#undef ADD_DATA +} + +void +test_to_command_line(gconstpointer data) +{ + const gchar *expected; + + expected = gcut_data_get_string(data, "expected"); + add_arguments((GHashTable *)(gcut_data_get_pointer(data, "arguments"))); + cut_assert_equal_string_with_free(expected, ggrn_command_to_command_line(command)); } -------------- next part -------------- HTML����������������������������... Download