diff --git a/src/calc.c b/src/calc.c index ff1963b9e69cc198be3d0e1d658ef4cdc10d68f8..0a96a8337ce6c8a36da81a1a8d42a2096dff6e9b 100644 --- a/src/calc.c +++ b/src/calc.c @@ -60,6 +60,8 @@ char *rpath(const char *from, char *to) { strcpy(tmp, cwd); else tmp[0] = 0; + if(strlen(cur) + 2 > PATH_MAX - strlen(tmp)) + return(NULL); strcat(tmp, "/"); strcat(tmp, cur); } else @@ -357,6 +359,7 @@ struct dir *showCalc(char *path) { *lasterr = '\0'; anpos = 0; lastupdate = 999; + memset(tmp, 0, PATH_MAX); /* init parent dir */ if(rpath(path, tmp) == NULL || lstat(tmp, &fs) != 0 || !S_ISDIR(fs.st_mode)) { diff --git a/src/main.c b/src/main.c index 63471f305eff32261e21e19ffaae3a0ea2b6431f..b09b17593522c4af5b1e510bc5a6ccf8aa3ab4e5 100644 --- a/src/main.c +++ b/src/main.c @@ -87,7 +87,10 @@ void parseCli(int argc, char **argv) { exit(1); } } else { - strcpy(sdir, argv[i]); + sdir[PATH_MAX - 1] = 0; + strncpy(sdir, argv[i], PATH_MAX); + if(sdir[PATH_MAX - 1] != 0) + sdir[0] = 0; } } if(s_export && !sdir[0]) {