diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2013-07-10 09:50:29 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2013-07-10 09:50:29 +0000 |
commit | 28c1b294b84fdb261c264525c62931ec8cbe0b8f (patch) | |
tree | a33ac4a716f0b0397092f31703e5c63084970868 /clang/unittests/Format/FormatTest.cpp | |
parent | ed5fe90bb87d13e3de5ebbb50d65421e5eb223d8 (diff) | |
download | bcm5719-llvm-28c1b294b84fdb261c264525c62931ec8cbe0b8f.tar.gz bcm5719-llvm-28c1b294b84fdb261c264525c62931ec8cbe0b8f.zip |
Fix a bug in the readdir_r interceptor: when we reach the end of the
directory stream, the entry is not written to, instead *result is set to
NULL and the entry is not written to at all.
I'm still somewhat suspicious of the correct instrumention here --
I feel like it should be marking the written range as the pointer in
*result and the length (*result)->d_reclen in case the implementation
decides not to use the passed-in entry (if that's even allowed).
Finally, the definition of 'struct dirent' analog used in the
interceptor is wrong in 32-bit mode with _FILE_OFFSET_BITS=64 as it hard
codes the use of a pointer-sized offset.
I've added a somewhat goofy test for the bug I fixed via ASan --
suggestions on how to better test the interceptor logic itself welcome.
llvm-svn: 185998
Diffstat (limited to 'clang/unittests/Format/FormatTest.cpp')
0 files changed, 0 insertions, 0 deletions