[Groonga-commit] groonga/groonga-gobject at d8b716e [master] Fix a crash bug by ggrn_command_to_command_line()

Back to archive index

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 



More information about the Groonga-commit mailing list
Back to archive index