On 1/27/19 6:18 AM, Heiko Bauke wrote:

Currently, there is an offer for open source developers to get a free license for the PVS-Studio Analyzer tool.  I got one and applied the tool to the darktable master branch.
...
I was not yet able to study the results in detail.  There might be a lot of false positives or just minor issues.  But I expect to find also more serious things.

I did a survey of the report index, dove into a few dozen of the errors and found it to be a high-quality report with little in the way of false positives.

A large percentage of the warnings are related to assumptions that pointers will not be NULL and a large percentage of those are directly or indirectly related to unchecked returns from malloc() and calloc().  That could be made to go away by writing wrapper functions that check what's returned and halt the program nicely in the rare event of a failure.  Knowing it was that would send the developers on fewer goose chases to find the cause of a SIGSEGV further down.  If performance is a concern (not that malloc() is a real screamer to begin with), the solution can be split in a way that makes it attractive for the optimizer to inline the check.

Those aside, the others I looked at seem legitimate and are worth fixing.  None of it will require major work.

For example, https://rabauke.github.io/darktable_analyze/sources/collection.c_4.html#ln144 looks very fishy to me.

That's definitely code I'd kick back during a review with a recommendation that it be written into a small function because the same logic is used repeatedly and that variable assignment inside the condition is ugly.  You might get a pull request for that shortly.  ;-)


If I can offer a few additional comments:

Before committing the project to PVS-Studio, it would be worth evaluating some of the alternatives, especially those that are open-source.  I think it's great that PVS offers a free license for so many situations, but there is the risk of having to go through and re-flag all of the spots in the code where warnings were suppressed should they change the license terms or go out of business and not release the sources.

Once the code is to a point where the analyzer has nothing to squawk about, static analysis needs to be repeated regularly. This could be done as a simple cron job that notifies the developers when something crops up or as a check run web hook to prevent code that doesn't pass from being committed to GitHub.  I have a system with cycles and space to play that role if needed and can make whatever configuration and scripts I develop part of the dt sources so others can run it.

Doing the cleanups for this is a great opportunity for someone like me who wants to give something back and doesn't have the time to take on a major project.  It isn't glamorous work, but I'd be happy to do it.

--Mark


___________________________________________________________________________
darktable developer mailing list
to unsubscribe send a mail to darktable-dev+unsubscr...@lists.darktable.org

Reply via email to