[Groonga-commit] groonga/groonga [master] [load] add valid table name check. fixes #934

Back to archive index

null+****@clear***** null+****@clear*****
2011年 5月 27日 (金) 11:10:56 JST


Kouhei Sutou	2011-05-27 02:10:56 +0000 (Fri, 27 May 2011)

  New Revision: 40df0839fa21bc98ee65d1a28748f6476dc3ff10

  Log:
    [load] add valid table name check. fixes #934

  Modified files:
    lib/db.c
    test/unit/core/test-command-load.c

  Modified: lib/db.c (+5 -1)
===================================================================
--- lib/db.c    2011-05-27 01:46:18 +0000 (c461fa2)
+++ lib/db.c    2011-05-27 02:10:56 +0000 (9471747)
@@ -8248,7 +8248,12 @@ grn_load(grn_ctx *ctx, grn_content_type input_type,
   }
   if (table && table_len) {
     grn_ctx_loader_clear(ctx);
+    loader->input_type = input_type;
     loader->table = grn_ctx_get(ctx, table, table_len);
+    if (!loader->table) {
+      ERR(GRN_INVALID_ARGUMENT, "nonexistent table: <%.*s>", table_len, table);
+      goto exit;
+    }
     if (loader->table && columns && columns_len) {
       int i, n_columns;
       grn_obj parsed_columns;
@@ -8290,7 +8295,6 @@ grn_load(grn_ctx *ctx, grn_content_type input_type,
                        GRN_EXPR_SYNTAX_SCRIPT|GRN_EXPR_ALLOW_UPDATE);
       }
     }
-    loader->input_type = input_type;
   } else {
     input_type = loader->input_type;
   }

  Modified: test/unit/core/test-command-load.c (+13 -0)
===================================================================
--- test/unit/core/test-command-load.c    2011-05-27 01:46:18 +0000 (3dd09e0)
+++ test/unit/core/test-command-load.c    2011-05-27 02:10:56 +0000 (ccf8ec2)
@@ -37,6 +37,7 @@ void test_no_key_table(void);
 void test_two_bigram_indexes_to_key(void);
 void test_invalid_start_with_symbol(void);
 void test_no_key_table_without_columns(void);
+void test_invalid_table_name(void);
 
 static gchar *tmp_directory;
 static const gchar *database_path;
@@ -466,3 +467,15 @@ test_no_key_table_without_columns(void)
                                      "[3]\n"
                                      "]");
 }
+
+void
+test_invalid_table_name(void)
+{
+  grn_test_assert_send_command_error(context,
+                                     GRN_INVALID_ARGUMENT,
+                                     "nonexistent table: <Users>",
+                                     "load --table Users\n"
+                                     "[\n"
+                                     "[\"_key\": \"alice\"]\n"
+                                     "]");
+}




Groonga-commit メーリングリストの案内
Back to archive index