Am 19.10.2015 um 10:03 schrieb Edward Bartolo:
> automated_scanner.c:521:2: warning:
> suggest parentheses around assignment used as truth value
> [-Wparentheses]
> if ( dir =opendir(IFACES_PATH) ) {

I recommend writing this instead at line 512 of automated_scanner.c:

   if (NULL != (dir = opendir(IFACES_PATH))) {

Reasoning:

   dir = opendir(...)

is an assignment that lets "dir" be "NULL" in case of error (it is
documented in the manpage of opendir(3) that it returns NULL in case of
error).

Furthermore, it is a behavior of the C assignment operator "=" that the
result of an assignment is the assigned value. This is why one can
write things like

   a = b = 1

Using an assignment as an if(...) condition this way is possible, but
there is a high risk of mistaking it with the check for equality
operator, "==":

   if(a = b)

is visually very close to

   if(a == b)

but they mean completely different things.

Also, using parentheses avoids confusion with operator precedence:

   a = b = 1

only works because "b = 1" is performed before "a = b"; for example,
while exposing the same behavior as the term above, it is visually
clearer to write

   a = (b = 1)

This is why the GNU C Compiler suggests performing the assignment in
parentheses if it is to be used as an "if(...)" condition.

The way I have written it, it is clearer that i first perform the
assignment "dir = opendir(...)" and afterwards explicity check that
"NULL" is not equal to the assigned value.

I generally would like to recommend writing statements as clearly as
possible whenever possible, but especially so in security relevant code
portions.

Kind regards,
T.

_______________________________________________
Dng mailing list
Dng@lists.dyne.org
https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng

Reply via email to