Re: [PATCH v3 02/25] Convert git_snpath() to strbuf_git_path()
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:59:57
Duy Nguyen [off-list ref] writes:
OK so your question was if there was a git_path() or mkpath() call earlier in update_refs_for_switch() and the result was expected to remain stable till the end of update_refs_for_switch(), then this conversion could ruin it, correct? I didn't think about that,...
Yeah, I couldn't tell if you thought about it, and that was why I
asked.
If a (recursively) caller does this:
caller () {
const char *path1 = git_path(...);
const char *path2 = mkpath(...);
const char *path3 = git_path_submodule(...);
callee();
use(path1, path2, path3);
}
it was safe back when the callee() did not mess with the round-robin
pathname buffer, but it will be broken once callee() does. While
looking at the patch I didn't check what the caller was doing hence
my question.
In general, in order to reduce that kind of hard-to-debug bugs, we
should be reducing the uses of these functions when we do not have
to (which applies equally to such a caller that expects multiple
temporary paths to persist, and to a callee as well). Adding
multiple repeated calls to git_path(), especially two of them
formatting the same string into two separate round-robin pathname
buffer, looked strange in a patch that was supposed to be a
preparatory code-cleanup stage.