Re: Using clang-analyzer with PHP: experiences?
| From: | Calvin Buckley | Date: | Tue, 25 May 2021 20:10:16 +0000 |
| Subject: | Re: Using clang-analyzer with PHP: experiences? | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-114600@lists.php.net to get a copy of this message | ||
I did some additional research and seemed to have decent luck with slamming a construct like this
after the includes:
#define emalloc malloc
#define erealloc realloc
#define ecalloc calloc
#define estrdup strdup
#define estrndup strndup
#define efree free
One could wrap it around
__clang_analyzer__ or such. Unfortunately, this is kinda ugly;
it emits compiler warnings, but I suspect this probably belongs in PHP itself or perhaps in some
kind of clang-analyzer addon that handles the e* allocation functions as well as things like
mismatching them.
> On May 21, 2021, at 4:01 PM, Calvin Buckley <calvin@cmpct.info> wrote:
>
> Hi internals@,
>
> I maintain an extension and I suspect there are some issues in the code. As such, I’ve been
> trying various tools to try to make it easier to catch the issues. (For the curious: I’ve tried
> *San, which I feel doesn’t work very well unless you /totally control/ the entire stack, which I
> didn’t have the luxury of. I also tried Valgrind, but I need ro revisit this to deal with possible
> false positives in the library.) This time, I decided to try static analysis through LLVM.
>
> Luckily, clang-analyzer is pretty simple. Just prepending “scan-build” to my make
> invocation. Easy, right? Unfortunately, I noticed that due to an inconsistency in the codebase (a
> use of realloc instead of erealloc), that it doesn’t seem to account for i.e emalloc vs. malloc.
> Possible leaks “went away” from the output when I converted them to the PHP memory management
> functions.
>
> Has anyone ever used clang-analyzer with PHP before? I noticed there was some tooling for a
> previous PHP transition [1], but I don’t know if anyone’s tackled the low-hanging fruit of
> memory functions. I suppose I could just redefine emalloc and friends, but I feel that would
> probably be inaccurate with things like zend_string.
>
> Regards,
> Calvin
>
> [1]: https://github.com/johannes/clang-php-checker
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: https://www.php.net/unsub.php
>