Use strlcpy() in favor of strncpy() as it's defined to have a nul character

at the end of string buffer, and the code context do expects this to behave
correctly (e.g. strchr).

Note that we do not believe there is real-world impact for gstat(8)'s usage
because the strings are length checked, and the on-stack buffer belongs to
main() and we can expect to have zeros in them.

MFC after:	2 weeks
This commit is contained in:
Xin LI
2015-09-11 06:52:57 +00:00
parent 9eddb899d9
commit 2d0fc14c63
+4 -4
View File
@@ -124,7 +124,7 @@ main(int argc, char **argv)
if (regcomp(&f_re, optarg, REG_EXTENDED) != 0) if (regcomp(&f_re, optarg, REG_EXTENDED) != 0)
errx(EX_USAGE, errx(EX_USAGE,
"Invalid filter - see re_format(7)"); "Invalid filter - see re_format(7)");
strncpy(f_s, optarg, sizeof(f_s)); strlcpy(f_s, optarg, sizeof(f_s));
break; break;
case 'o': case 'o':
flag_o = 1; flag_o = 1;
@@ -216,7 +216,7 @@ main(int argc, char **argv)
getyx(stdscr, cury, curx); getyx(stdscr, cury, curx);
getmaxyx(stdscr, maxy, maxx); getmaxyx(stdscr, maxy, maxx);
} }
strncpy(pf_s, f_s, sizeof(pf_s)); strlcpy(pf_s, f_s, sizeof(pf_s));
max_flen = maxx - curx - 1; max_flen = maxx - curx - 1;
if ((int)strlen(f_s) > max_flen && max_flen >= 0) { if ((int)strlen(f_s) > max_flen && max_flen >= 0) {
if (max_flen > 3) if (max_flen > 3)
@@ -406,7 +406,7 @@ main(int argc, char **argv)
err(1, "el_gets"); err(1, "el_gets");
if (line_len > 1) if (line_len > 1)
history(hist, &hist_ev, H_ENTER, line); history(hist, &hist_ev, H_ENTER, line);
strncpy(tmp_f_s, line, sizeof(f_s)); strlcpy(tmp_f_s, line, sizeof(f_s));
if ((p = strchr(tmp_f_s, '\n')) != NULL) if ((p = strchr(tmp_f_s, '\n')) != NULL)
*p = '\0'; *p = '\0';
/* /*
@@ -423,7 +423,7 @@ main(int argc, char **argv)
refresh(); refresh();
sleep(1); sleep(1);
} else { } else {
strncpy(f_s, tmp_f_s, sizeof(f_s)); strlcpy(f_s, tmp_f_s, sizeof(f_s));
f_re = tmp_f_re; f_re = tmp_f_re;
} }
break; break;