Commit 003c5e46 by Patrick Steinhardt

transports: smart_pkt: fix memory leaks on error paths

parent 793e0855
...@@ -296,13 +296,12 @@ static int ng_pkt(git_pkt **out, const char *line, size_t len) ...@@ -296,13 +296,12 @@ static int ng_pkt(git_pkt **out, const char *line, size_t len)
pkt = git__malloc(sizeof(*pkt)); pkt = git__malloc(sizeof(*pkt));
GITERR_CHECK_ALLOC(pkt); GITERR_CHECK_ALLOC(pkt);
pkt->ref = NULL;
pkt->type = GIT_PKT_NG; pkt->type = GIT_PKT_NG;
line += 3; /* skip "ng " */ line += 3; /* skip "ng " */
if (!(ptr = strchr(line, ' '))) { if (!(ptr = strchr(line, ' ')))
giterr_set(GITERR_NET, "Invalid packet line"); goto out_err;
return -1;
}
len = ptr - line; len = ptr - line;
GITERR_CHECK_ALLOC_ADD(&alloclen, len, 1); GITERR_CHECK_ALLOC_ADD(&alloclen, len, 1);
...@@ -313,12 +312,8 @@ static int ng_pkt(git_pkt **out, const char *line, size_t len) ...@@ -313,12 +312,8 @@ static int ng_pkt(git_pkt **out, const char *line, size_t len)
pkt->ref[len] = '\0'; pkt->ref[len] = '\0';
line = ptr + 1; line = ptr + 1;
if (!(ptr = strchr(line, '\n'))) { if (!(ptr = strchr(line, '\n')))
giterr_set(GITERR_NET, "Invalid packet line"); goto out_err;
git__free(pkt->ref);
git__free(pkt);
return -1;
}
len = ptr - line; len = ptr - line;
GITERR_CHECK_ALLOC_ADD(&alloclen, len, 1); GITERR_CHECK_ALLOC_ADD(&alloclen, len, 1);
...@@ -330,6 +325,12 @@ static int ng_pkt(git_pkt **out, const char *line, size_t len) ...@@ -330,6 +325,12 @@ static int ng_pkt(git_pkt **out, const char *line, size_t len)
*out = (git_pkt *)pkt; *out = (git_pkt *)pkt;
return 0; return 0;
out_err:
giterr_set(GITERR_NET, "Invalid packet line");
git__free(pkt->ref);
git__free(pkt);
return -1;
} }
static int unpack_pkt(git_pkt **out, const char *line, size_t len) static int unpack_pkt(git_pkt **out, const char *line, size_t len)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment