Merge branch 'jk/sideband-more-error-checking'

The code to detect premature EOF in the sideband demultiplexer has
been cleaned up.

* jk/sideband-more-error-checking:
  sideband: diagnose more sideband anomalies
This commit is contained in:
Junio C Hamano
2020-11-09 14:06:29 -08:00
4 changed files with 47 additions and 14 deletions

View File

@ -3,6 +3,7 @@
#include "config.h"
#include "sideband.h"
#include "help.h"
#include "pkt-line.h"
struct keyword_entry {
/*
@ -114,7 +115,8 @@ static void maybe_colorize_sideband(struct strbuf *dest, const char *src, int n)
#define ANSI_SUFFIX "\033[K"
#define DUMB_SUFFIX " "
int demultiplex_sideband(const char *me, char *buf, int len,
int demultiplex_sideband(const char *me, int status,
char *buf, int len,
int die_on_error,
struct strbuf *scratch,
enum sideband_type *sideband_type)
@ -130,17 +132,30 @@ int demultiplex_sideband(const char *me, char *buf, int len,
suffix = DUMB_SUFFIX;
}
if (len == 0) {
*sideband_type = SIDEBAND_FLUSH;
goto cleanup;
}
if (len < 1) {
if (status == PACKET_READ_EOF) {
strbuf_addf(scratch,
"%s%s: protocol error: no band designator",
"%s%s: unexpected disconnect while reading sideband packet",
scratch->len ? "\n" : "", me);
*sideband_type = SIDEBAND_PROTOCOL_ERROR;
goto cleanup;
}
if (len < 0)
BUG("negative length on non-eof packet read");
if (len == 0) {
if (status == PACKET_READ_NORMAL) {
strbuf_addf(scratch,
"%s%s: protocol error: missing sideband designator",
scratch->len ? "\n" : "", me);
*sideband_type = SIDEBAND_PROTOCOL_ERROR;
} else {
/* covers flush, delim, etc */
*sideband_type = SIDEBAND_FLUSH;
}
goto cleanup;
}
band = buf[0] & 0xff;
buf[len] = '\0';
len--;