summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2018-08-09 10:36:44 +0200
committerPatrick Steinhardt <ps@pks.im>2018-10-03 16:06:48 +0200
commit4a5804c983317100eed509537edc32d69c8d7aa2 (patch)
treeea9b5b563f0e69b53bd4abf6942babaa03bae181
parent365d2720c1a5fc89f03fd85265c8b45195c7e4a8 (diff)
downloadlibgit2-4a5804c983317100eed509537edc32d69c8d7aa2.tar.gz
smart_pkt: honor line length when determining packet type
When we parse the packet type of an incoming packet line, we do not verify that we don't overflow the provided line buffer. Fix this by using `git__prefixncmp` instead and passing in `len`. As we have previously already verified that `len <= linelen`, we thus won't ever overflow the provided buffer length.
-rw-r--r--src/transports/smart_pkt.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/transports/smart_pkt.c b/src/transports/smart_pkt.c
index 00798c396..7c5a3f2b6 100644
--- a/src/transports/smart_pkt.c
+++ b/src/transports/smart_pkt.c
@@ -459,19 +459,19 @@ int git_pkt_parse_line(
ret = sideband_progress_pkt(head, line, len);
else if (*line == GIT_SIDE_BAND_ERROR)
ret = sideband_error_pkt(head, line, len);
- else if (!git__prefixcmp(line, "ACK"))
+ else if (!git__prefixncmp(line, len, "ACK"))
ret = ack_pkt(head, line, len);
- else if (!git__prefixcmp(line, "NAK"))
+ else if (!git__prefixncmp(line, len, "NAK"))
ret = nak_pkt(head);
- else if (!git__prefixcmp(line, "ERR "))
+ else if (!git__prefixncmp(line, len, "ERR "))
ret = err_pkt(head, line, len);
else if (*line == '#')
ret = comment_pkt(head, line, len);
- else if (!git__prefixcmp(line, "ok"))
+ else if (!git__prefixncmp(line, len, "ok"))
ret = ok_pkt(head, line, len);
- else if (!git__prefixcmp(line, "ng"))
+ else if (!git__prefixncmp(line, len, "ng"))
ret = ng_pkt(head, line, len);
- else if (!git__prefixcmp(line, "unpack"))
+ else if (!git__prefixncmp(line, len, "unpack"))
ret = unpack_pkt(head, line, len);
else
ret = ref_pkt(head, line, len);