Commit 7e3cd611 by Patrick Steinhardt

smart_pkt: reorder and rename parameters of `git_pkt_parse_line`

The parameters of the `git_pkt_parse_line` function are quite confusing.
First, there is no real indicator what the `out` parameter is actually
all about, and it's not really clear what the `bufflen` parameter refers
to. Reorder and rename the parameters to make this more obvious.

(cherry picked from commit 0b3dfbf4)
parent 356f60f4
...@@ -189,7 +189,7 @@ int git_smart__get_push_stream(transport_smart *t, git_smart_subtransport_stream ...@@ -189,7 +189,7 @@ int git_smart__get_push_stream(transport_smart *t, git_smart_subtransport_stream
int git_smart__update_heads(transport_smart *t, git_vector *symrefs); int git_smart__update_heads(transport_smart *t, git_vector *symrefs);
/* smart_pkt.c */ /* smart_pkt.c */
int git_pkt_parse_line(git_pkt **head, const char *line, const char **out, size_t len); int git_pkt_parse_line(git_pkt **head, const char **endptr, const char *line, size_t linelen);
int git_pkt_buffer_flush(git_buf *buf); int git_pkt_buffer_flush(git_buf *buf);
int git_pkt_send_flush(GIT_SOCKET s); int git_pkt_send_flush(GIT_SOCKET s);
int git_pkt_buffer_done(git_buf *buf); int git_pkt_buffer_done(git_buf *buf);
......
...@@ -407,13 +407,13 @@ static int32_t parse_len(const char *line) ...@@ -407,13 +407,13 @@ static int32_t parse_len(const char *line)
*/ */
int git_pkt_parse_line( int git_pkt_parse_line(
git_pkt **head, const char *line, const char **out, size_t bufflen) git_pkt **pkt, const char **endptr, const char *line, size_t linelen)
{ {
int ret; int ret;
int32_t len; int32_t len;
/* Not even enough for the length */ /* Not even enough for the length */
if (bufflen > 0 && bufflen < PKT_LEN_SIZE) if (linelen > 0 && linelen < PKT_LEN_SIZE)
return GIT_EBUFS; return GIT_EBUFS;
len = parse_len(line); len = parse_len(line);
...@@ -422,7 +422,7 @@ int git_pkt_parse_line( ...@@ -422,7 +422,7 @@ int git_pkt_parse_line(
* If we fail to parse the length, it might be because the * If we fail to parse the length, it might be because the
* server is trying to send us the packfile already. * server is trying to send us the packfile already.
*/ */
if (bufflen >= 4 && !git__prefixcmp(line, "PACK")) { if (linelen >= 4 && !git__prefixcmp(line, "PACK")) {
giterr_set(GITERR_NET, "unexpected pack file"); giterr_set(GITERR_NET, "unexpected pack file");
} else { } else {
giterr_set(GITERR_NET, "bad packet length"); giterr_set(GITERR_NET, "bad packet length");
...@@ -435,7 +435,7 @@ int git_pkt_parse_line( ...@@ -435,7 +435,7 @@ int git_pkt_parse_line(
* If we were given a buffer length, then make sure there is * If we were given a buffer length, then make sure there is
* enough in the buffer to satisfy this line * enough in the buffer to satisfy this line
*/ */
if (bufflen > 0 && bufflen < (size_t)len) if (linelen > 0 && linelen < (size_t)len)
return GIT_EBUFS; return GIT_EBUFS;
/* /*
...@@ -458,36 +458,36 @@ int git_pkt_parse_line( ...@@ -458,36 +458,36 @@ int git_pkt_parse_line(
} }
if (len == 0) { /* Flush pkt */ if (len == 0) { /* Flush pkt */
*out = line; *endptr = line;
return flush_pkt(head); return flush_pkt(pkt);
} }
len -= PKT_LEN_SIZE; /* the encoded length includes its own size */ len -= PKT_LEN_SIZE; /* the encoded length includes its own size */
if (*line == GIT_SIDE_BAND_DATA) if (*line == GIT_SIDE_BAND_DATA)
ret = data_pkt(head, line, len); ret = data_pkt(pkt, line, len);
else if (*line == GIT_SIDE_BAND_PROGRESS) else if (*line == GIT_SIDE_BAND_PROGRESS)
ret = sideband_progress_pkt(head, line, len); ret = sideband_progress_pkt(pkt, line, len);
else if (*line == GIT_SIDE_BAND_ERROR) else if (*line == GIT_SIDE_BAND_ERROR)
ret = sideband_error_pkt(head, line, len); ret = sideband_error_pkt(pkt, line, len);
else if (!git__prefixncmp(line, len, "ACK")) else if (!git__prefixncmp(line, len, "ACK"))
ret = ack_pkt(head, line, len); ret = ack_pkt(pkt, line, len);
else if (!git__prefixncmp(line, len, "NAK")) else if (!git__prefixncmp(line, len, "NAK"))
ret = nak_pkt(head); ret = nak_pkt(pkt);
else if (!git__prefixncmp(line, len, "ERR")) else if (!git__prefixncmp(line, len, "ERR"))
ret = err_pkt(head, line, len); ret = err_pkt(pkt, line, len);
else if (*line == '#') else if (*line == '#')
ret = comment_pkt(head, line, len); ret = comment_pkt(pkt, line, len);
else if (!git__prefixncmp(line, len, "ok")) else if (!git__prefixncmp(line, len, "ok"))
ret = ok_pkt(head, line, len); ret = ok_pkt(pkt, line, len);
else if (!git__prefixncmp(line, len, "ng")) else if (!git__prefixncmp(line, len, "ng"))
ret = ng_pkt(head, line, len); ret = ng_pkt(pkt, line, len);
else if (!git__prefixncmp(line, len, "unpack")) else if (!git__prefixncmp(line, len, "unpack"))
ret = unpack_pkt(head, line, len); ret = unpack_pkt(pkt, line, len);
else else
ret = ref_pkt(head, line, len); ret = ref_pkt(pkt, line, len);
*out = line + len; *endptr = line + len;
return ret; return ret;
} }
......
...@@ -44,7 +44,7 @@ int git_smart__store_refs(transport_smart *t, int flushes) ...@@ -44,7 +44,7 @@ int git_smart__store_refs(transport_smart *t, int flushes)
do { do {
if (buf->offset > 0) if (buf->offset > 0)
error = git_pkt_parse_line(&pkt, buf->data, &line_end, buf->offset); error = git_pkt_parse_line(&pkt, &line_end, buf->data, buf->offset);
else else
error = GIT_EBUFS; error = GIT_EBUFS;
...@@ -217,7 +217,7 @@ static int recv_pkt(git_pkt **out, git_pkt_type *pkt_type, gitno_buffer *buf) ...@@ -217,7 +217,7 @@ static int recv_pkt(git_pkt **out, git_pkt_type *pkt_type, gitno_buffer *buf)
do { do {
if (buf->offset > 0) if (buf->offset > 0)
error = git_pkt_parse_line(&pkt, ptr, &line_end, buf->offset); error = git_pkt_parse_line(&pkt, &line_end, ptr, buf->offset);
else else
error = GIT_EBUFS; error = GIT_EBUFS;
...@@ -751,7 +751,7 @@ static int add_push_report_sideband_pkt(git_push *push, git_pkt_data *data_pkt, ...@@ -751,7 +751,7 @@ static int add_push_report_sideband_pkt(git_push *push, git_pkt_data *data_pkt,
} }
while (line_len > 0) { while (line_len > 0) {
error = git_pkt_parse_line(&pkt, line, &line_end, line_len); error = git_pkt_parse_line(&pkt, &line_end, line, line_len);
if (error == GIT_EBUFS) { if (error == GIT_EBUFS) {
/* Buffer the data when the inner packet is split /* Buffer the data when the inner packet is split
...@@ -794,8 +794,8 @@ static int parse_report(transport_smart *transport, git_push *push) ...@@ -794,8 +794,8 @@ static int parse_report(transport_smart *transport, git_push *push)
for (;;) { for (;;) {
if (buf->offset > 0) if (buf->offset > 0)
error = git_pkt_parse_line(&pkt, buf->data, error = git_pkt_parse_line(&pkt, &line_end,
&line_end, buf->offset); buf->data, buf->offset);
else else
error = GIT_EBUFS; error = GIT_EBUFS;
......
...@@ -12,7 +12,7 @@ static void assert_flush_parses(const char *line) ...@@ -12,7 +12,7 @@ static void assert_flush_parses(const char *line)
const char *endptr; const char *endptr;
git_pkt *pkt; git_pkt *pkt;
cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, line, &endptr, linelen)); cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, &endptr, line, linelen));
cl_assert_equal_i(pkt->type, GIT_PKT_FLUSH); cl_assert_equal_i(pkt->type, GIT_PKT_FLUSH);
cl_assert_equal_strn(endptr, line + 4, linelen - 4); cl_assert_equal_strn(endptr, line + 4, linelen - 4);
...@@ -25,7 +25,7 @@ static void assert_data_pkt_parses(const char *line, const char *expected_data, ...@@ -25,7 +25,7 @@ static void assert_data_pkt_parses(const char *line, const char *expected_data,
const char *endptr; const char *endptr;
git_pkt_data *pkt; git_pkt_data *pkt;
cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, line, &endptr, linelen)); cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, &endptr, line, linelen));
cl_assert_equal_i(pkt->type, GIT_PKT_DATA); cl_assert_equal_i(pkt->type, GIT_PKT_DATA);
cl_assert_equal_i(pkt->len, expected_len); cl_assert_equal_i(pkt->len, expected_len);
cl_assert_equal_strn(pkt->data, expected_data, expected_len); cl_assert_equal_strn(pkt->data, expected_data, expected_len);
...@@ -39,7 +39,7 @@ static void assert_sideband_progress_parses(const char *line, const char *expect ...@@ -39,7 +39,7 @@ static void assert_sideband_progress_parses(const char *line, const char *expect
const char *endptr; const char *endptr;
git_pkt_progress *pkt; git_pkt_progress *pkt;
cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, line, &endptr, linelen)); cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, &endptr, line, linelen));
cl_assert_equal_i(pkt->type, GIT_PKT_PROGRESS); cl_assert_equal_i(pkt->type, GIT_PKT_PROGRESS);
cl_assert_equal_i(pkt->len, expected_len); cl_assert_equal_i(pkt->len, expected_len);
cl_assert_equal_strn(pkt->data, expected_data, expected_len); cl_assert_equal_strn(pkt->data, expected_data, expected_len);
...@@ -53,7 +53,7 @@ static void assert_error_parses(const char *line, const char *expected_error, si ...@@ -53,7 +53,7 @@ static void assert_error_parses(const char *line, const char *expected_error, si
const char *endptr; const char *endptr;
git_pkt_err *pkt; git_pkt_err *pkt;
cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, line, &endptr, linelen)); cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, &endptr, line, linelen));
cl_assert_equal_i(pkt->type, GIT_PKT_ERR); cl_assert_equal_i(pkt->type, GIT_PKT_ERR);
cl_assert_equal_i(pkt->len, expected_len); cl_assert_equal_i(pkt->len, expected_len);
cl_assert_equal_strn(pkt->error, expected_error, expected_len); cl_assert_equal_strn(pkt->error, expected_error, expected_len);
...@@ -70,7 +70,7 @@ static void assert_ack_parses(const char *line, const char *expected_oid, enum g ...@@ -70,7 +70,7 @@ static void assert_ack_parses(const char *line, const char *expected_oid, enum g
cl_git_pass(git_oid_fromstr(&oid, expected_oid)); cl_git_pass(git_oid_fromstr(&oid, expected_oid));
cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, line, &endptr, linelen)); cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, &endptr, line, linelen));
cl_assert_equal_i(pkt->type, GIT_PKT_ACK); cl_assert_equal_i(pkt->type, GIT_PKT_ACK);
cl_assert_equal_oid(&pkt->oid, &oid); cl_assert_equal_oid(&pkt->oid, &oid);
cl_assert_equal_i(pkt->status, expected_status); cl_assert_equal_i(pkt->status, expected_status);
...@@ -84,7 +84,7 @@ static void assert_nak_parses(const char *line) ...@@ -84,7 +84,7 @@ static void assert_nak_parses(const char *line)
const char *endptr; const char *endptr;
git_pkt *pkt; git_pkt *pkt;
cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, line, &endptr, linelen)); cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, &endptr, line, linelen));
cl_assert_equal_i(pkt->type, GIT_PKT_NAK); cl_assert_equal_i(pkt->type, GIT_PKT_NAK);
cl_assert_equal_strn(endptr, line + 7, linelen - 7); cl_assert_equal_strn(endptr, line + 7, linelen - 7);
...@@ -97,7 +97,7 @@ static void assert_comment_parses(const char *line, const char *expected_comment ...@@ -97,7 +97,7 @@ static void assert_comment_parses(const char *line, const char *expected_comment
const char *endptr; const char *endptr;
git_pkt_comment *pkt; git_pkt_comment *pkt;
cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, line, &endptr, linelen)); cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, &endptr, line, linelen));
cl_assert_equal_i(pkt->type, GIT_PKT_COMMENT); cl_assert_equal_i(pkt->type, GIT_PKT_COMMENT);
cl_assert_equal_strn(pkt->comment, expected_comment, strlen(expected_comment)); cl_assert_equal_strn(pkt->comment, expected_comment, strlen(expected_comment));
...@@ -110,7 +110,7 @@ static void assert_ok_parses(const char *line, const char *expected_ref) ...@@ -110,7 +110,7 @@ static void assert_ok_parses(const char *line, const char *expected_ref)
const char *endptr; const char *endptr;
git_pkt_ok *pkt; git_pkt_ok *pkt;
cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, line, &endptr, linelen)); cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, &endptr, line, linelen));
cl_assert_equal_i(pkt->type, GIT_PKT_OK); cl_assert_equal_i(pkt->type, GIT_PKT_OK);
cl_assert_equal_strn(pkt->ref, expected_ref, strlen(expected_ref)); cl_assert_equal_strn(pkt->ref, expected_ref, strlen(expected_ref));
...@@ -123,7 +123,7 @@ static void assert_unpack_parses(const char *line, bool ok) ...@@ -123,7 +123,7 @@ static void assert_unpack_parses(const char *line, bool ok)
const char *endptr; const char *endptr;
git_pkt_unpack *pkt; git_pkt_unpack *pkt;
cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, line, &endptr, linelen)); cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, &endptr, line, linelen));
cl_assert_equal_i(pkt->type, GIT_PKT_UNPACK); cl_assert_equal_i(pkt->type, GIT_PKT_UNPACK);
cl_assert_equal_i(pkt->unpack_ok, ok); cl_assert_equal_i(pkt->unpack_ok, ok);
...@@ -136,7 +136,7 @@ static void assert_ng_parses(const char *line, const char *expected_ref, const c ...@@ -136,7 +136,7 @@ static void assert_ng_parses(const char *line, const char *expected_ref, const c
const char *endptr; const char *endptr;
git_pkt_ng *pkt; git_pkt_ng *pkt;
cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, line, &endptr, linelen)); cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, &endptr, line, linelen));
cl_assert_equal_i(pkt->type, GIT_PKT_NG); cl_assert_equal_i(pkt->type, GIT_PKT_NG);
cl_assert_equal_strn(pkt->ref, expected_ref, strlen(expected_ref)); cl_assert_equal_strn(pkt->ref, expected_ref, strlen(expected_ref));
cl_assert_equal_strn(pkt->msg, expected_msg, strlen(expected_msg)); cl_assert_equal_strn(pkt->msg, expected_msg, strlen(expected_msg));
...@@ -156,7 +156,7 @@ static void assert_ref_parses_(const char *line, size_t linelen, const char *exp ...@@ -156,7 +156,7 @@ static void assert_ref_parses_(const char *line, size_t linelen, const char *exp
cl_git_pass(git_oid_fromstr(&oid, expected_oid)); cl_git_pass(git_oid_fromstr(&oid, expected_oid));
cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, line, &endptr, linelen)); cl_git_pass(git_pkt_parse_line((git_pkt **) &pkt, &endptr, line, linelen));
cl_assert_equal_i(pkt->type, GIT_PKT_REF); cl_assert_equal_i(pkt->type, GIT_PKT_REF);
cl_assert_equal_oid(&pkt->head.oid, &oid); cl_assert_equal_oid(&pkt->head.oid, &oid);
cl_assert_equal_strn(pkt->head.name, expected_ref, strlen(expected_ref)); cl_assert_equal_strn(pkt->head.name, expected_ref, strlen(expected_ref));
...@@ -172,7 +172,7 @@ static void assert_pkt_fails(const char *line) ...@@ -172,7 +172,7 @@ static void assert_pkt_fails(const char *line)
{ {
const char *endptr; const char *endptr;
git_pkt *pkt; git_pkt *pkt;
cl_git_fail(git_pkt_parse_line(&pkt, line, &endptr, strlen(line) + 1)); cl_git_fail(git_pkt_parse_line(&pkt, &endptr, line, strlen(line) + 1));
} }
void test_transports_smart_packet__parsing_garbage_fails(void) void test_transports_smart_packet__parsing_garbage_fails(void)
......
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