summaryrefslogtreecommitdiff
path: root/src/transports/smart_protocol.c
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2016-11-15 11:44:51 +0100
committerEdward Thomson <ethomson@github.com>2017-01-06 17:11:58 +0000
commit2fdef641fd0dd2828bd948234ae86de75221a11a (patch)
treeb47eb6eec38f6dbc25effb14da3962dbe66ee361 /src/transports/smart_protocol.c
parent66e3774d279672ee51c3b54545a79d20d1ada834 (diff)
downloadlibgit2-2fdef641fd0dd2828bd948234ae86de75221a11a.tar.gz
smart_pkt: treat empty packet lines as error
The Git protocol does not specify what should happen in the case of an empty packet line (that is a packet line "0004"). We currently indicate success, but do not return a packet in the case where we hit an empty line. The smart protocol was not prepared to handle such packets in all cases, though, resulting in a `NULL` pointer dereference. Fix the issue by returning an error instead. As such kind of packets is not even specified by upstream, this is the right thing to do.
Diffstat (limited to 'src/transports/smart_protocol.c')
-rw-r--r--src/transports/smart_protocol.c11
1 files changed, 0 insertions, 11 deletions
diff --git a/src/transports/smart_protocol.c b/src/transports/smart_protocol.c
index 53c0b089e..db6a8b9c8 100644
--- a/src/transports/smart_protocol.c
+++ b/src/transports/smart_protocol.c
@@ -763,14 +763,6 @@ static int add_push_report_sideband_pkt(git_push *push, git_pkt_data *data_pkt,
line_len -= (line_end - line);
line = line_end;
- /* When a valid packet with no content has been
- * read, git_pkt_parse_line does not report an
- * error, but the pkt pointer has not been set.
- * Handle this by skipping over empty packets.
- */
- if (pkt == NULL)
- continue;
-
error = add_push_report_pkt(push, pkt);
git_pkt_free(pkt);
@@ -825,9 +817,6 @@ static int parse_report(transport_smart *transport, git_push *push)
error = 0;
- if (pkt == NULL)
- continue;
-
switch (pkt->type) {
case GIT_PKT_DATA:
/* This is a sideband packet which contains other packets */