[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