[Groonga-commit] groonga/groonga [master] add path-length checks.

アーカイブの一覧に戻る

null+****@clear***** null+****@clear*****
2011年 11月 4日 (金) 17:45:50 JST


Susumu Yata	2011-11-04 08:45:50 +0000 (Fri, 04 Nov 2011)

  New Revision: 6f7d3ad765265fd2f6112e445dfd1119ef44ff00

  Log:
    add path-length checks.

  Modified files:
    lib/dat.cpp

  Modified: lib/dat.cpp (+14 -4)
===================================================================
--- lib/dat.cpp    2011-11-04 08:35:28 +0000 (dba4d7c)
+++ lib/dat.cpp    2011-11-04 08:45:50 +0000 (66c9831)
@@ -110,7 +110,7 @@ grn_dat_fin(grn_ctx *ctx, grn_dat *dat)
 void
 grn_dat_generate_trie_path(const char *base_path, char *trie_path, int file_id)
 {
-  if (base_path == NULL) {
+  if (!base_path) {
     trie_path[0] = '\0';
     return;
   }
@@ -146,7 +146,7 @@ grn_dat_open_trie_if_needed(grn_ctx *ctx, grn_dat *dat)
   grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
   grn::dat::Trie * const old_trie = static_cast<grn::dat::Trie *>(dat->old_trie);
   grn::dat::Trie * const new_trie = new (std::nothrow) grn::dat::Trie;
-  if (new_trie == NULL) {
+  if (!new_trie) {
     MERR(const_cast<char *>("new grn::dat::Trie failed"));
     return false;
   }
@@ -209,6 +209,11 @@ grn_dat *
 grn_dat_create(grn_ctx *ctx, const char *path, uint32_t key_size,
                uint32_t, uint32_t flags)
 {
+  if (path && (std::strlen(path) >= (PATH_MAX - 4))) {
+    ERR(GRN_FILENAME_TOO_LONG, const_cast<char *>("too long path"));
+    return NULL;
+  }
+
   grn_dat * const dat = static_cast<grn_dat *>(GRN_MALLOC(sizeof(grn_dat)));
   if (!dat) {
     return NULL;
@@ -245,6 +250,11 @@ grn_dat_create(grn_ctx *ctx, const char *path, uint32_t key_size,
 grn_dat *
 grn_dat_open(grn_ctx *ctx, const char *path)
 {
+  if (path && (std::strlen(path) >= (PATH_MAX - 4))) {
+    ERR(GRN_FILENAME_TOO_LONG, const_cast<char *>("too long path"));
+    return NULL;
+  }
+
   grn_dat * const dat = static_cast<grn_dat *>(GRN_MALLOC(sizeof(grn_dat)));
   if (!dat) {
     return NULL;
@@ -284,7 +294,7 @@ grn_rc
 grn_dat_remove(grn_ctx *ctx, const char *path)
 {
   grn_dat * const dat = grn_dat_open(ctx, path);
-  if (dat == NULL) {
+  if (!dat) {
     return ctx->rc;
   }
   uint32_t const file_id = dat->header->file_id;
@@ -334,7 +344,7 @@ grn_dat_add(grn_ctx *ctx, grn_dat *dat, const void *key,
     char trie_path[PATH_MAX];
     grn_dat_generate_trie_path(grn_io_path(dat->io), trie_path, 1);
     grn::dat::Trie * const new_trie = new (std::nothrow) grn::dat::Trie;
-    if (new_trie == NULL) {
+    if (!new_trie) {
       MERR(const_cast<char *>("new grn::dat::Trie failed"));
       return GRN_ID_NIL;
     }




Groonga-commit メーリングリストの案内
アーカイブの一覧に戻る