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:

committed by
Junio C Hamano

parent
80460f513e
commit
c81539b5f6
20
trace.c
20
trace.c
@ -25,15 +25,25 @@
|
|||||||
#include "cache.h"
|
#include "cache.h"
|
||||||
#include "quote.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. */
|
/* Get a trace file descriptor from "key" env variable. */
|
||||||
static int get_trace_fd(struct trace_key *key)
|
static int get_trace_fd(struct trace_key *key)
|
||||||
{
|
{
|
||||||
static struct trace_key trace_default = { "GIT_TRACE" };
|
|
||||||
const char *trace;
|
const char *trace;
|
||||||
|
|
||||||
/* use default "GIT_TRACE" if NULL */
|
normalize_trace_key(&key);
|
||||||
if (!key)
|
|
||||||
key = &trace_default;
|
|
||||||
|
|
||||||
/* don't open twice */
|
/* don't open twice */
|
||||||
if (key->initialized)
|
if (key->initialized)
|
||||||
@ -75,6 +85,8 @@ static int get_trace_fd(struct trace_key *key)
|
|||||||
|
|
||||||
void trace_disable(struct trace_key *key)
|
void trace_disable(struct trace_key *key)
|
||||||
{
|
{
|
||||||
|
normalize_trace_key(&key);
|
||||||
|
|
||||||
if (key->need_close)
|
if (key->need_close)
|
||||||
close(key->fd);
|
close(key->fd);
|
||||||
key->fd = 0;
|
key->fd = 0;
|
||||||
|
Reference in New Issue
Block a user