https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80047
Bug ID: 80047
Summary: fixincludes/fixincl.c: PVS-Studio: Improper Release of
Memory Before Removing Last Reference (CWE-401)
Product: gcc
Version: 7.0.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: other
Assignee: unassigned at gcc dot gnu.org
Reporter: khandeliants at viva64 dot com
Target Milestone: ---
We have found a weakness (CWE-401) using PVS-Studio tool. PVS-Studio is a
static code analyzer for C, C++ and C#: https://www.viva64.com/en/pvs-studio/
Analyzer warning: V575 The null pointer is passed into 'getcwd' function.
Inspect the first argument. fixincl.c 1357
void process (void)
{
....
if (access (pz_curr_file, R_OK) != 0)
{
int erno = errno;
fprintf (stderr,
"Cannot access %s from %s\n\terror %d (%s)\n",
pz_curr_file,
getcwd ((char *) NULL, MAXPATHLEN), // <=
erno,
xstrerror (erno));
return;
}
....
}
As an extension to the POSIX.1-2001 standard, glibc's getcwd() allocates the
buffer dynamically using malloc if buf is NULL. In this case, the allocated
buffer has the length size unless size is zero, when buf is allocated as big as
necessary. The caller should free the returned buffer.