char fpath[BUF_MAX];
char *fname;
char *dir = (char*)data;
- char len = strlen(dir);
+ int len = strlen(dir);
+
+ if (!dir || len <= 0) {
+ _E("Invalid parameter");
+ return RESOURCED_ERROR_INVALID_PARAMETER;
+ }
+
+ if (len >= BUF_MAX - 1) {
+ _E("Directory path is too long");
+ return RESOURCED_ERROR_FAIL;
+ }
n = scandir(dir, &namelist, memps_file_select, alphasort);
_D("num of log files %d", n);
return RESOURCED_ERROR_NONE;
}
- strncpy(fpath, dir, BUF_MAX);
+ strncpy(fpath, dir, len);
fname = fpath + len;
*fname++ = '/';
- len = BUF_MAX - len - 2;
+ len = BUF_MAX - len - 1;
for (i = 0; i < n; i++) {
if (i < NUM_RM_LOGS) {
- strncpy(fname, namelist[i]->d_name, len);
+ if (strlen(namelist[i]->d_name) > len - 1)
+ continue;
+ strncpy(fname, namelist[i]->d_name, len - 1);
fpath[BUF_MAX - 1] = '\0';
_D("remove log file %s", fpath);
ret = remove(fpath);