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
Loading
Please sign in to comment