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:
Jeff King 2016-08-03 18:56:57 -04:00 коммит произвёл Junio C Hamano
Родитель 80460f513e
Коммит c81539b5f6
1 изменённых файлов: 16 добавлений и 4 удалений

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;