Skip to content

Commit

Permalink
trace: use strbuf for quote_crnl output
Browse files Browse the repository at this point in the history
When we output GIT_TRACE_SETUP paths, we quote any
meta-characters. But our buffer to hold the result is only
PATH_MAX bytes, and we could double the size of the input
path (if every character needs quoting). We could use a
2*PATH_MAX buffer, if we assume the input will never be more
than PATH_MAX. But it's easier still to just switch to a
strbuf and not worry about whether the input can exceed
PATH_MAX or not.

The original copied the "p2" pointer to "p1", advancing
both. Since this gets rid of "p1", let's also drop "p2",
whose name is now confusing. We can just advance the
original "path" pointer.

Signed-off-by: Jeff King <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
peff authored and gitster committed Sep 25, 2015
1 parent 1d895f1 commit 0bb443f
Showing 1 changed file with 11 additions and 12 deletions.
23 changes: 11 additions & 12 deletions trace.c
Original file line number Diff line number Diff line change
Expand Up @@ -277,25 +277,24 @@ void trace_performance_fl(const char *file, int line, uint64_t nanos,

static const char *quote_crnl(const char *path)
{
static char new_path[PATH_MAX];
const char *p2 = path;
char *p1 = new_path;
static struct strbuf new_path = STRBUF_INIT;

if (!path)
return NULL;

while (*p2) {
switch (*p2) {
case '\\': *p1++ = '\\'; *p1++ = '\\'; break;
case '\n': *p1++ = '\\'; *p1++ = 'n'; break;
case '\r': *p1++ = '\\'; *p1++ = 'r'; break;
strbuf_reset(&new_path);

while (*path) {
switch (*path) {
case '\\': strbuf_addstr(&new_path, "\\\\"); break;
case '\n': strbuf_addstr(&new_path, "\\n"); break;
case '\r': strbuf_addstr(&new_path, "\\r"); break;
default:
*p1++ = *p2;
strbuf_addch(&new_path, *path);
}
p2++;
path++;
}
*p1 = '\0';
return new_path;
return new_path.buf;
}

/* FIXME: move prefix to startup_info struct and get rid of this arg */
Expand Down

0 comments on commit 0bb443f

Please sign in to comment.