If we get a packet from the remote side that is too large to fit in our buffer, we currently complain "protocol error: bad line length". This is a bit vague. The line length the other side sent is not "bad" per se; the actual problem is that it exceeded our expectation for buffer length.
This will generally not happen between two git-core implementations, because the sender limits themselves to either 1000, or to LARGE_PACKET_MAX (depending on what is being sent, sideband-64k negotiation, etc), and the receiver uses a buffer of the appropriate size. The protocol document indicates the LARGE_PACKET_MAX limit (of 65520), but does not actually specify the 1000-byte limit for ref lines. It is likely that other implementations just create a packet as large as they need, and this doesn't come up often because nobody has 1000-character ref names (or close to it, counting sha1 and other boilerplate). We may want to increase the size of our receive buffers for ref lines to prepare for such writers (whether they are other implementations, or if we eventually want to bump the write size in git-core). In the meantime, this patch tries to give a more clear message in case it does come up. Signed-off-by: Jeff King <p...@peff.net> --- I'm really tempted to bump all of our 1000-byte buffers to just use LARGE_PACKET_MAX. If we provided a packet_read variant that used a static buffer (which is fine for all but one or two callers), then it would not take much memory (right now we stick some LARGE_PACKET_MAX buffers on the stack, which is slightly questionable for stack-restricted systems). But I left that for a different topic (and even if we do, we would still want this message to catch anything over the bizarre 65520 limit). Out of curiosity, I grepped the list archives, and found only one instance of this message. And it was somebody whose data stream was tainted with random crud that happened to be numbers (much more common is "bad line length character", when the crud does not look like a packet length). pkt-line.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkt-line.c b/pkt-line.c index 62479d3..f2a7575 100644 --- a/pkt-line.c +++ b/pkt-line.c @@ -160,7 +160,8 @@ static int packet_read_internal(int fd, char *buffer, unsigned size, int gently) } len -= 4; if (len >= size) - die("protocol error: bad line length %d", len); + die("protocol error: line too large: (expected %u, got %d)", + size, len); ret = safe_read(fd, buffer, len, gently); if (ret < 0) return ret; -- 18.104.22.168.g7078b03 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html