sysctl: fix potential null derefence [smatch scan]

sysctl.c:560 PreloadSystem(29) error: potential null derefence 'cfgs'.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
This commit is contained in:
Sami Kerola 2012-02-05 21:02:34 +01:00
parent 8cd53e16b5
commit 1689e769e6

View File

@ -557,7 +557,7 @@ static int PreloadSystem(void)
continue; continue;
/* check if config already known */ /* check if config already known */
for (i = 0; i < ncfgs; ++i) { for (i = 0; i < ncfgs; ++i) {
if (!strcmp(cfgs[i]->name, de->d_name)) if (cfgs && !strcmp(cfgs[i]->name, de->d_name))
break; break;
} }
if (i < ncfgs) if (i < ncfgs)
@ -565,22 +565,32 @@ static int PreloadSystem(void)
continue; continue;
if (ncfgs % nprealloc == 0) if (ncfgs % nprealloc == 0)
cfgs = xrealloc(cfgs, sizeof(struct pair *) * (ncfgs + nprealloc)); cfgs =
cfgs[ncfgs] = xrealloc(cfgs,
xmalloc(sizeof(struct pair) + strlen(de->d_name) * 2 + 2 + sizeof(struct pair *) * (ncfgs +
strlen(dirs[di]) + 1); nprealloc));
cfgs[ncfgs]->name = (char *) cfgs[ncfgs] + sizeof(struct pair);
strcpy(cfgs[ncfgs]->name, de->d_name); if (cfgs) {
cfgs[ncfgs]->value = cfgs[ncfgs] =
(char *) cfgs[ncfgs] + sizeof(struct pair) + strlen(cfgs[ncfgs]->name) + xmalloc(sizeof(struct pair) +
1; strlen(de->d_name) * 2 + 2 +
sprintf(cfgs[ncfgs]->value, "%s/%s", dirs[di], de->d_name); strlen(dirs[di]) + 1);
ncfgs++; cfgs[ncfgs]->name =
(char *)cfgs[ncfgs] + sizeof(struct pair);
strcpy(cfgs[ncfgs]->name, de->d_name);
cfgs[ncfgs]->value =
(char *)cfgs[ncfgs] + sizeof(struct pair) +
strlen(cfgs[ncfgs]->name) + 1;
sprintf(cfgs[ncfgs]->value, "%s/%s", dirs[di],
de->d_name);
ncfgs++;
} else {
xerrx(EXIT_FAILURE, _("internal error"));
}
} }
closedir(dp); closedir(dp);
} }
qsort(cfgs, ncfgs, sizeof(struct cfg *), sortpairs); qsort(cfgs, ncfgs, sizeof(struct cfg *), sortpairs);
for (i = 0; i < ncfgs; ++i) { for (i = 0; i < ncfgs; ++i) {