From: Libor Peltan Date: Wed, 9 Apr 2025 08:10:26 +0000 (+0200) Subject: zscanner: bugfix: buffering from pipe X-Git-Tag: v3.5.0~118^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3cc6da022bf92f43e710bde0aa7e4622f543faa8;p=thirdparty%2Fknot-dns.git zscanner: bugfix: buffering from pipe --- diff --git a/src/libzscanner/scanner.c.g2 b/src/libzscanner/scanner.c.g2 index 5c376e3734..060999ff17 100644 --- a/src/libzscanner/scanner.c.g2 +++ b/src/libzscanner/scanner.c.g2 @@ -227,8 +227,12 @@ static char *read_file_to_buf( char *buf = malloc(bufs + newbufs); int ret = 0; - while (buf != NULL && (ret = read(fd, buf + bufs, newbufs)) == newbufs) { - bufs += newbufs; + while (buf != NULL && (ret = read(fd, buf + bufs, newbufs)) > 0) { + bufs += ret; + if (ret < newbufs) { + newbufs -= ret; + continue; + } newbufs = bufs; char *newbuf = realloc(buf, bufs + newbufs); if (newbuf == NULL) { diff --git a/src/libzscanner/scanner.c.t0 b/src/libzscanner/scanner.c.t0 index 1dd5618678..48c6bdf125 100644 --- a/src/libzscanner/scanner.c.t0 +++ b/src/libzscanner/scanner.c.t0 @@ -6622,8 +6622,12 @@ static char *read_file_to_buf( char *buf = malloc(bufs + newbufs); int ret = 0; - while (buf != NULL && (ret = read(fd, buf + bufs, newbufs)) == newbufs) { - bufs += newbufs; + while (buf != NULL && (ret = read(fd, buf + bufs, newbufs)) > 0) { + bufs += ret; + if (ret < newbufs) { + newbufs -= ret; + continue; + } newbufs = bufs; char *newbuf = realloc(buf, bufs + newbufs); if (newbuf == NULL) { diff --git a/src/libzscanner/scanner.rl b/src/libzscanner/scanner.rl index 7f5d984dbc..badec642c6 100644 --- a/src/libzscanner/scanner.rl +++ b/src/libzscanner/scanner.rl @@ -228,8 +228,12 @@ static char *read_file_to_buf( char *buf = malloc(bufs + newbufs); int ret = 0; - while (buf != NULL && (ret = read(fd, buf + bufs, newbufs)) == newbufs) { - bufs += newbufs; + while (buf != NULL && (ret = read(fd, buf + bufs, newbufs)) > 0) { + bufs += ret; + if (ret < newbufs) { + newbufs -= ret; + continue; + } newbufs = bufs; char *newbuf = realloc(buf, bufs + newbufs); if (newbuf == NULL) {