소스 검색

* Fix off-by-1 NULL after realpath() calls

Bryan Drewery 17 년 전
부모
커밋
e860b6c027
2개의 변경된 파일3개의 추가작업 그리고 3개의 파일을 삭제
  1. 1 1
      src/misc_file.c
  2. 2 2
      src/shell.c

+ 1 - 1
src/misc_file.c

@@ -324,7 +324,7 @@ bool Tempfile::FindDir()
   for (int i = 0; dirs[i]; i++) {
     if (!realpath(dirs[i], tempdir))
       continue;
-    tempdir[DIRMAX] = 0;
+    tempdir[(DIRMAX < PATH_MAX ? DIRMAX : PATH_MAX) - 1] = 0;
     size_t len = strlen(tempdir);
     tempdir[len] = '/';
     tempdir[len + 1] = '\0';

+ 2 - 2
src/shell.c

@@ -754,7 +754,7 @@ char *homedir(bool useconf)
         homedir_buf[0] = 0;
         return NULL;
       }
-      homedir_buf[DIRMAX] = 0;
+      homedir_buf[DIRMAX < PATH_MAX ? DIRMAX - 1 : PATH_MAX - 1] = 0;
     }
     ContextNote(STR("realpath(): Success"));
   }
@@ -872,7 +872,7 @@ char *move_bin(const char *ipath, const char *file, bool run)
   ContextNote(STR("realpath()"));
   if (!realpath(binname, real))            /* get the realpath of binname */
     fatal(STR("Unable to determine binary path."), 0);
-  real[DIRMAX] = 0;
+  real[(DIRMAX < PATH_MAX ? DIRMAX : PATH_MAX) - 1] = 0;
   ContextNote(STR("realpath(): Success"));
   /* running from wrong dir, or wrong bin name.. lets try to fix that :) */
   sdprintf(STR("binname: %s"), binname);