[Groonga-commit] groonga/groonga [master] add tests to detect a too long path.

Back to archive index

null+****@clear***** null+****@clear*****
2011年 11月 7日 (月) 16:41:18 JST


Susumu Yata	2011-11-07 07:41:18 +0000 (Mon, 07 Nov 2011)

  New Revision: de39f3f606c28229cfab1b464e641fbf625234c8

  Log:
    add tests to detect a too long path.

  Modified files:
    lib/plugin.c

  Modified: lib/plugin.c (+14 -0)
===================================================================
--- lib/plugin.c    2011-11-07 06:19:17 +0000 (3590501)
+++ lib/plugin.c    2011-11-07 07:41:18 +0000 (f708498)
@@ -270,12 +270,21 @@ grn_plugin_register_by_path(grn_ctx *ctx, const char *path)
     grn_id id = GRN_ID_NIL;
     FILE *plugin_file;
     char complemented_path[PATH_MAX], complemented_libs_path[PATH_MAX];
+    size_t path_len;
 
+    if ((path_len = strlen(path)) >= PATH_MAX) {
+      ERR(GRN_FILENAME_TOO_LONG, "too long path");
+      GRN_API_RETURN(ctx->rc);
+    }
     plugin_file = fopen(path, "r");
     if (plugin_file) {
       fclose(plugin_file);
       id = grn_plugin_open(ctx, path);
     } else {
+      if ((path_len += strlen(grn_plugin_get_suffix())) >= PATH_MAX) {
+        ERR(GRN_FILENAME_TOO_LONG, "too long path");
+        GRN_API_RETURN(ctx->rc);
+      }
       strcpy(complemented_path, path);
       strcat(complemented_path, grn_plugin_get_suffix());
       plugin_file = fopen(complemented_path, "r");
@@ -290,6 +299,11 @@ grn_plugin_register_by_path(grn_ctx *ctx, const char *path)
 
         base_name = strrchr(path, '/');
         if (base_name) {
+          path_len = base_name - path + strlen("/.libs") + strlen(base_name);
+          if ((path_len += strlen(grn_plugin_get_suffix())) >= PATH_MAX) {
+            ERR(GRN_FILENAME_TOO_LONG, "too long path");
+            GRN_API_RETURN(ctx->rc);
+          }
           complemented_libs_path[0] = '\0';
           strncat(complemented_libs_path, path, base_name - path);
           strcat(complemented_libs_path, "/.libs");




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