Re: [RFC 2/2] Make misuse of get_pathname() buffers detectable by valgrind
From: Nguyen Thai Ngoc Duy <hidden>
Date: 2016-06-15 22:52:29
On Tue, Sep 27, 2011 at 11:28 AM, Michael Haggerty [off-list ref] wrote:
A temporary buffer produced by get_pathname() is recycled after a few subsequent calls of get_pathname(). The use of such a buffer after it has been recycled can result in the wrong file being accessed with very strange effects. Moreover, such a bug can lie dormant until code elsewhere is changed to use a temporary buffer, causing very mysterious, nonlocal failures that are hard to analyze. Add a second implementation of get_pathname() (activated if the VALGRIND preprocessor macro is defined) that allocates and frees buffers instead of recycling statically-allocated buffers. This does not make the problem less serious, but it turns the errors into access-after-free errors, making it possible to locate the guilty code using valgrind. Signed-off-by: Michael Haggerty <redacted> --- I believe that it is frowned upon to use #ifdefs in git code, but no good alternative is obvious to me for this type of use. Suggestions are welcome.
Enable the code based on an environment variable, e.g. GIT_DEBUG_FENCE, then enable it by default in test-lib.sh :-) -- Duy