pgrep: some coverity fixes

procps_ns_get_id should be checked for < 0 not -1
strncpy should copy only to buflen-1 not buflen

References:
  Coverity 99117, 99108, 99107
This commit is contained in:
Craig Small 2016-04-27 22:50:25 +10:00
parent f6d6d305e7
commit ad13b4badb
2 changed files with 7 additions and 6 deletions

1
.gitignore vendored
View File

@ -20,6 +20,7 @@ config.rpath
config.status config.status
config.sub config.sub
configure configure
cov-int
depcomp depcomp
free free
INSTALL INSTALL

12
pgrep.c
View File

@ -264,7 +264,7 @@ static struct el *read_pidfile(void)
if (n<1) if (n<1)
goto out; goto out;
pid = strtoul(buf+1,&endp,10); pid = strtoul(buf+1,&endp,10);
if(endp<=buf+1 || pid<1 || pid>0x7fffffff) if(endp<=buf+1 || pid<1 )
goto out; goto out;
if(*endp && !isspace(*endp)) if(*endp && !isspace(*endp))
goto out; goto out;
@ -359,7 +359,7 @@ static int conv_ns (const char *restrict name, struct el *restrict e)
ns_flags = 0; ns_flags = 0;
id = procps_ns_get_id(name); id = procps_ns_get_id(name);
if (id == -1) if (id < 0)
return 0; return 0;
ns_flags |= (1 << id); ns_flags |= (1 << id);
@ -545,16 +545,16 @@ static struct el * select_procs (int *num)
if (opt_long || opt_longlong || (match && opt_pattern)) { if (opt_long || opt_longlong || (match && opt_pattern)) {
if (opt_longlong) if (opt_longlong)
strncpy (cmdoutput, task_cmdline, CMDSTRSIZE); strncpy (cmdoutput, task_cmdline, CMDSTRSIZE-1);
else else
strncpy (cmdoutput, PIDS_GETSTR(CMD), CMDSTRSIZE); strncpy (cmdoutput, PIDS_GETSTR(CMD), CMDSTRSIZE-1);
} }
if (match && opt_pattern) { if (match && opt_pattern) {
if (opt_full) if (opt_full)
strncpy (cmdsearch, task_cmdline, CMDSTRSIZE); strncpy (cmdsearch, task_cmdline, CMDSTRSIZE-1);
else else
strncpy (cmdsearch, PIDS_GETSTR(CMD), CMDSTRSIZE); strncpy (cmdsearch, PIDS_GETSTR(CMD), CMDSTRSIZE-1);
if (regexec (preg, cmdsearch, 0, NULL, 0) != 0) if (regexec (preg, cmdsearch, 0, NULL, 0) != 0)
match = 0; match = 0;