зеркало из https://github.com/microsoft/git.git
trace: handle NULL argument in trace_disable()
All of the trace functions treat a NULL key as a synonym for the default GIT_TRACE key. Except for trace_disable(), which will segfault. Fortunately, this can't cause any bugs, as the function has no callers. But rather than drop it, let's fix the bug, as I plan to add a caller. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
80460f513e
Коммит
c81539b5f6
20
trace.c
20
trace.c
|
@ -25,15 +25,25 @@
|
|||
#include "cache.h"
|
||||
#include "quote.h"
|
||||
|
||||
/*
|
||||
* "Normalize" a key argument by converting NULL to our trace_default,
|
||||
* and otherwise passing through the value. All caller-facing functions
|
||||
* should normalize their inputs in this way, though most get it
|
||||
* for free by calling get_trace_fd() (directly or indirectly).
|
||||
*/
|
||||
static void normalize_trace_key(struct trace_key **key)
|
||||
{
|
||||
static struct trace_key trace_default = { "GIT_TRACE" };
|
||||
if (!*key)
|
||||
*key = &trace_default;
|
||||
}
|
||||
|
||||
/* Get a trace file descriptor from "key" env variable. */
|
||||
static int get_trace_fd(struct trace_key *key)
|
||||
{
|
||||
static struct trace_key trace_default = { "GIT_TRACE" };
|
||||
const char *trace;
|
||||
|
||||
/* use default "GIT_TRACE" if NULL */
|
||||
if (!key)
|
||||
key = &trace_default;
|
||||
normalize_trace_key(&key);
|
||||
|
||||
/* don't open twice */
|
||||
if (key->initialized)
|
||||
|
@ -75,6 +85,8 @@ static int get_trace_fd(struct trace_key *key)
|
|||
|
||||
void trace_disable(struct trace_key *key)
|
||||
{
|
||||
normalize_trace_key(&key);
|
||||
|
||||
if (key->need_close)
|
||||
close(key->fd);
|
||||
key->fd = 0;
|
||||
|
|
Загрузка…
Ссылка в новой задаче