[cfe-dev] What memory-allocating functions should we check for leaks?
<Alexander G. Riccio> via cfe-dev
cfe-dev at lists.llvm.org
Fri Mar 4 14:17:09 PST 2016
As a continuation of D17688 (add MSVC variants of strdup to leak checks),
I'm going to add a bunch of other Microsoft functions to the static
analyzer. I'm also going to add tempnam, a cstdlib function that returns a
pointer to memory that must be manually freed.
What other functions should I add?
Currently, I'm going to add:
- _free_dbg
- _malloc_dbg
- _realloc_dbg
- _recalloc_dbg
- _calloc_dbg
- _strdup_dbg
- _wcsdup_dbg
- _mbsdup
- _mbsdup_dbg
- tempnam
- _tempnam
- _tempnam_dbg
- _wtempnam
- _wtempnam_dbg
A bunch of other functions that I'd like to add, but are non-trivial to
add, so I'll hold off on them for now:
- Aligned functions (I think that you're not supposed to mix them with
their non-aligned variants)
- _aligned_free
- _aligned_free_dbg
- _aligned_malloc
- _aligned_malloc_dbg
- _aligned_msize
- _aligned_msize_dbg
- _aligned_offset_malloc
- _aligned_offset_malloc_dbg
- _aligned_offset_realloc
- _aligned_offset_realloc_dbg
- _aligned_offset_recalloc
- _aligned_offset_recalloc_dbg
- _aligned_realloc
- _aligned_realloc_dbg
- _aligned_recalloc
- _aligned_recalloc_dbg
- Functions that should be freed with a function other than free:
- _free_locale
- _create_locale
- _wcreate_locale
- Functions that only return dynamically allocated memory in certain
conditions:
- getcwd
- _getcwd
- _getcwd_dbg
- _wgetcwd
- _wgetcwd_dbg
- _getdcwd
- _getdcwd_dbg
- _wgetdcwd
- _wgetdcwd_dbg
- realpath
- _fullpath
- _fullpath_dbg
- _wfullpath
- _wfullpath_dbg
- Functions that return dynamically allocated memory via an "_Out_"
parameter*:
- _dupenv_s
- _dupenv_s_dbg
- _wdupenv_s
- _wdupenv_s_dbg
- Functions which *may* allocate stack *or* heap:
- _malloca <https://msdn.microsoft.com/en-us/library/5471dc8s.aspx> (must
be freed with _freea
<https://msdn.microsoft.com/en-us/library/k8984a8h.aspx>)
- Functions that return non-freeable memory, if passed NULL, but look
like users should free them. These two are very weird, and therefore it
might be very useful to check:
- tmpnam <http://en.cppreference.com/w/cpp/io/c/tmpnam>
- _wtmpnam <https://msdn.microsoft.com/en-us/library/hs3e7355.aspx>
*for the SAL obsessed (like me) it's actually
"_Outptr_result_buffer_maybenull_(*_BufferCount)
_Outptr_result_maybenull_z_".
Sincerely,
Alexander Riccio
--
"Change the world or go home."
about.me/ariccio
<http://about.me/ariccio>
If left to my own devices, I will build more.
⁂
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160304/c45bc1e2/attachment.html>
More information about the cfe-dev
mailing list