Hi,
Valuable message.
For my part, what I have to say is, use all resources to deal with bugs
in C development, because is easy make new bugs and hard to find us.

With respect "misleading indentation", I follow K&R here, example:
if {
a = 1;
} else {
a = 2;
}
The explicit use { } is much better than emplicit, despite being more verbose.
Its clear to all, where blocks start and finish, much easier find mistakes.

With respect -Wall -Werror, Nginx uses. Any warning raise compiler error.
The problem with -Werror, is const directive. I use extensively in my own C 
code,
to get more performance, and "const" generate a lot warnings, that can be,
safely ignored, so for now I do not use.

With respect 3rd party IUP libraries, Coverity Scan reports 190 warnings,
with serious bugs, like Memory Corrupt, Resource Leak. It would be a great,
direct users these libraries, help to fixing, once the IUP team do not have 
time.
If someone request, I can post here some report.

Finally, my message is use all resources, to fix a bug, before, your user
find it.

Best regards,
Ranier Vilela

________________________________________
De: sur-behoffski <sur_behoff...@grouse.com.au>
Enviado: sábado, 8 de junho de 2019 05:28
Para: IUP discussion list.
Assunto: Re: [Iup-users] Warnings Report (Part 1 of a multi-part response)

On 6/7/19 11:48 PM, Antonio Scuri wrote:
>    Hi All,
>
>    Here are some comments about the warnings report:
>
> - The report sent by Sur has 4000 lines. I just spent a long time taking a
> good look again at it. My opinion does not change.
> [...]

Thank you for your effort.  IUP is a beast, compared to CD, and, to a lesser
extent IM, in terms of the warnings produced.  IM fares badly because, again,
it has a lot of third-party libraries that have were incorporated a long time
ago, and the GCC folks have steadily worked in improving code flow analysis,
and increasing the types, number and accuracy of warnings, over the time
since the initial incorporation.

One of the most verbose warnings is the "misleading indentation" warning for
the various types of control constructs.  This warning was added as a result
of a serious security hole in Apple's OS, CVE-20140-1266, a.k.a. "goto fail":

         David A Wheeler: "The Apple goto fail vulnerability: lessons learned"

         https://dwheeler.com/essays/apple-goto-fail.html

CVE-2014-1266 (https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-1266)
states:

         The SSLVerifySignedServerKeyExchange function in
         libsecurity_ssl/lib/sslKeyExchange.c in the Secure Transport feature
         in the Data Security component in Apple iOS 6.x before 6.1.6 and 7.x
         before 7.0.6, Apple TV 6.x before 6.0.2, and Apple OS X 10.9.x before
         10.9.2 does not check the signature in a TLS Server Key Exchange
         message, which allows man-in-the-middle attackers to spoof SSL
         servers by (1) using an arbitrary private key for the signing step
         or (2) omitting the signing step.

David Wheeler provides a snippet from  SSLVerifySignedServerKeyExchange:

         if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
                 goto fail;
                 goto fail;
         ... other checks ...
         fail:
           ... buffer frees (cleanups) ...
           return err;

The misleading indentation here let in a serious security vulnerability
into production releases across a range of products.  As suggested in Wheeler's
paper, the "misleading indentation" warning was added as a direct response
to this defect.

Many projects have adopted a zero-tolerance approach to warnings, where,
notably as in this case, if the warning had been implemented prior to the
work on this code, it would have pointed out the defective second
"goto fail;" statement.  The compiler community reacted quickly, and added
the "misleading indentation" diagnostic.

Coding standards for many projects, especially safety-critical or very
high-value missions, have adopted a sophisticated nearly-zero-tolerance
to warnings, as follows:

         - If the compiler writers chose to implement a warning because of a
           reaction to a real-world bug, then the warning is, by default,
           seen as a defect unless the developer can make a compelling case,
           in a code review, why both of the following is true:
                 (a) The compiler is erroneous in its analysis; and
                 (b) It is too hard for the developer to rework the code
                     to avoid the warning -- perhaps the code can be changed
                     to appease one compiler, only to have a second compiler
                     (or perhaps another analysis tool) complain about the
                     change.
         - If the warning is deemed to be truly spurious, then the warning
           is suppressed via a "triage" step, before the final warning
           report is issued.

> - As pointed the warnings in third party libraries will be ignored. I think
> Sur could exclude that from the report. Would be easier for me to read.
> Especially Scintilla and MathGL that are in C++ generates lots of warnings.
> [...]

See Gerard Holzmann's presentation "Mars Code" from Usenix 2012, about how
the software for mission, including the Curiosity rover, (near 4 million
lines of C code, too large to do paragraph-by-paragraph code reviews) was
helped by automated tools, including Coverity and CodeSonar, and compiler
warnings (across multiple compilers, including GCC) to analyse the code,
with nightly full-codebase analysis runs.

In the talk, he mentions first using "-Wall" for GCC, then later tightening
the screws by using "-Wall -Werror", and THEN tightening the screws further
by using "-Wall -Wpedantic -Werror" (with a longish time-frame between each
increase in compiler warning level, so developers can clear the decks and
breathe a sigh of relief, only to suddenly find the "clean" code is again
back under the hammer under the new, tightened regime).

         
https://www.usenix.org/conference/hotdep12/workshop-program/presentation/Holzmann

I've worked on another project where a build farm subjected the codebase
to a full rebuild, across a variety of machines and architectures (e.g. both
big-endian and little-endian architectures), and with a demand for
zero warnings to be maintained with each code check-in.  I found this
environment to be very valuable in helping to produce robust code (for an
application demanding a very, very low defect level).

Okay, enough for this first message.  I can see encouraging ways to go
forward from here (especially if I implement a "suppress/triage" database
facility related to "parse-build.lua", and this database can be populated
carefully, trying to choose which warnings are to be suppressed, to
minimise the chances of errors slipping through).

cheers,

sur-behoffski (Brenton Hoff)
programmer, Grouse Software


_______________________________________________
Iup-users mailing list
Iup-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/iup-users


_______________________________________________
Iup-users mailing list
Iup-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/iup-users

Reply via email to