diff options
| author | Nelson Elhage <nelhage@nelhage.com> | 2018-06-29 16:53:23 +0000 |
|---|---|---|
| committer | Nelson Elhage <nelhage@nelhage.com> | 2018-06-29 16:53:23 +0000 |
| commit | b840855730bdb5dfcfa3d71d48893ca21d720004 (patch) | |
| tree | 8c640896c3823f85a427537cf781eb992d227258 /src/transports/smart_protocol.c | |
| parent | 895a668e19dc596e7b12ea27724ceb7b68556106 (diff) | |
| parent | 967da2c71c5eb3ff1292ac3f479757ad51a21298 (diff) | |
| download | libgit2-b840855730bdb5dfcfa3d71d48893ca21d720004.tar.gz | |
Merge remote-tracking branch 'origin/master' into no-pkt-pack
Diffstat (limited to 'src/transports/smart_protocol.c')
| -rw-r--r-- | src/transports/smart_protocol.c | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/src/transports/smart_protocol.c b/src/transports/smart_protocol.c index 8a094b698..948b93bdd 100644 --- a/src/transports/smart_protocol.c +++ b/src/transports/smart_protocol.c @@ -70,6 +70,12 @@ int git_smart__store_refs(transport_smart *t, int flushes) return -1; } + if (pkt->type == GIT_PKT_PACK) { + giterr_set(GITERR_NET, "unexpected packfile"); + git__free(pkt); + return -1; + } + if (pkt->type != GIT_PKT_FLUSH && git_vector_insert(refs, pkt) < 0) return -1; @@ -317,27 +323,30 @@ on_error: static int wait_while_ack(gitno_buffer *buf) { int error; - git_pkt_ack *pkt = NULL; + git_pkt *pkt = NULL; + git_pkt_ack *ack = NULL; while (1) { - git__free(pkt); + git_pkt_free(pkt); - if ((error = recv_pkt((git_pkt **)&pkt, NULL, buf)) < 0) + if ((error = recv_pkt(&pkt, NULL, buf)) < 0) return error; if (pkt->type == GIT_PKT_NAK) break; + if (pkt->type != GIT_PKT_ACK) + continue; - if (pkt->type == GIT_PKT_ACK && - (pkt->status != GIT_ACK_CONTINUE && - pkt->status != GIT_ACK_COMMON && - pkt->status != GIT_ACK_READY)) { - git__free(pkt); - return 0; + ack = (git_pkt_ack*)pkt; + + if (ack->status != GIT_ACK_CONTINUE && + ack->status != GIT_ACK_COMMON && + ack->status != GIT_ACK_READY) { + break; } } - git__free(pkt); + git_pkt_free(pkt); return 0; } @@ -615,7 +624,8 @@ int git_smart__download_pack( } } - git__free(pkt); + git_pkt_free(pkt); + if (error < 0) goto done; |
