commit bcf7cd444a9e9057ce6f48cfb03573b4972d7559 from: Stefan Sperling date: Tue Apr 16 15:59:32 2024 UTC make got-fetch-http get_refs() understand when packet lines end Previously it would only exit the loop when reading failed. ok tobhe@ commit - fd1b27119fe0bafd2e0b5ee26e877c742edfeb0e commit + bcf7cd444a9e9057ce6f48cfb03573b4972d7559 blob - 02951a4033a9780646d80ed187c221487167e497 blob + d3283c409607632e6832eeae310b43f122ea16ba --- libexec/got-fetch-http/got-fetch-http.c +++ libexec/got-fetch-http/got-fetch-http.c @@ -421,31 +421,45 @@ get_refs(int https, const char *host, const char *port fwrite(buf, 1, r, stdout); + t = 0; n = 0; - while (verbose && n + 4 < r) { + while (n + 4 <= r) { buf[n + 4] = '\0'; t = hexstrtonum(&buf[n], 0, sizeof(buf) - n, &errstr); if (errstr != NULL) { - warnx("pktline len is %s", errstr); + fprintf(stderr, "pktline len is %s", errstr); goto err; + } + + if (t == 0) { + if (verbose) { + fprintf(stderr, "%s: readpkt: 0000\n", + getprogname()); + } + break; } if (t < 6) { - warnx("pktline len is too small"); + fprintf(stderr, "pktline len is too small"); goto err; } - fprintf(stderr, "%s: readpkt: %lld:\t", - getprogname(), t - 4); - for (i = 5; i < t; i++) { - if (isprint((unsigned char)buf[n + i])) - fputc(buf[n + i], stderr); - else - fprintf(stderr, "[0x%.2x]", buf[n + i]); + if (verbose) { + fprintf(stderr, "%s: readpkt: %lld:\t", + getprogname(), t - 4); + for (i = 5; i < t; i++) { + if (isprint((unsigned char)buf[n + i])) + fputc(buf[n + i], stderr); + else + fprintf(stderr, "[0x%.2x]", + buf[n + i]); + } + fputc('\n', stderr); } - fputc('\n', stderr); n += t; } + if (t == 0) + break; } fflush(stdout);