llvm-project/libcxx/test
Petr Hosek 89385633ba [libc++] Set __file_ to 0 in basic_filebuf::close() even if fclose fails
This issue was detected by ASan in one of our tests. This test manually
invokes basic_filebuf::cloe(). fclose(__h.release() returned a non-zero
exit status, so __file_ wasn't set to 0. Later when basic_filebuf
destructor ran, we would enter the if (__file_) block again leading to
heap-use-after-free error.

The POSIX specification for fclose says that independently of the return
value, fclose closes the underlying file descriptor and any further
access (including another call to fclose()) to the stream results in
undefined behavior. This is exactly what happened in our test case.

To avoid this issue, we have to always set __file_ to 0 independently of
the fclose return value.

Differential Revision: https://reviews.llvm.org/D64979

llvm-svn: 366730
2019-07-22 19:54:34 +00:00
..
libcxx [libc++] Mark libcpp_deallocate.sh.cpp as UNSUPPORTED instead of XFAIL on AppleClang 9 2019-07-19 19:41:40 +00:00
std [libc++] Set __file_ to 0 in basic_filebuf::close() even if fclose fails 2019-07-22 19:54:34 +00:00
support Add option to disable variant narrowing conversion changes. 2019-07-12 21:32:11 +00:00
CMakeLists.txt Revert "[libc++] Integrate the PSTL into libc++" 2019-07-19 18:52:46 +00:00
lit.cfg Move libcxx/test/libcxx python package into libcxx/utils/libcxx. 2017-02-09 23:18:11 +00:00
lit.site.cfg.in Revert "[libc++] Integrate the PSTL into libc++" 2019-07-19 18:52:46 +00:00
nothing_to_do.pass.cpp force the bots to cycle 2019-05-09 02:34:37 +00:00