Subject: Re: [PATCH v3 02/25] Convert git_snpath() to strbuf_git_path()

From: Junio C Hamano <[email-masked]>
Date: Wed, 19 Feb 2014 15:48:52 -0800

Nguyễn Thái Ngọc Duy  <[email-masked]> writes:

> @@ -651,14 +653,10 @@ static void update_refs_for_switch(const struct checkout_opts *opts,
>  					new->name);
>  			}
>  		}
> -		if (old->path && old->name) {
> -			char log_file[PATH_MAX], ref_file[PATH_MAX];
> -
> -			git_snpath(log_file, sizeof(log_file), "logs/%s", old->path);
> -			git_snpath(ref_file, sizeof(ref_file), "%s", old->path);
> -			if (!file_exists(ref_file) && file_exists(log_file))
> -				remove_path(log_file);
> -		}
> +		if (old->path && old->name &&
> +		    !file_exists(git_path("%s", old->path)) &&
> +		     file_exists(git_path("logs/%s", old->path)))
> +			remove_path(git_path("logs/%s", old->path));

Hmph.  Is this conversion safe?

This adds three uses of the round-robin path buffer; if a caller of
this function used two or more path buffers obtained from
get_pathname() and expected their contents to remain stable across
the call to this, it will silently break.