]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
zscanner: bugfix: buffering from pipe
authorLibor Peltan <libor.peltan@nic.cz>
Wed, 9 Apr 2025 08:10:26 +0000 (10:10 +0200)
committerLibor Peltan <libor.peltan@nic.cz>
Wed, 9 Apr 2025 08:10:26 +0000 (10:10 +0200)
src/libzscanner/scanner.c.g2
src/libzscanner/scanner.c.t0
src/libzscanner/scanner.rl

index 5c376e3734ed4ea41c20e455dd3e29817dc278d2..060999ff17409e3acdf5c1adaa0f4376f033e6cd 100644 (file)
@@ -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) {
index 1dd5618678e60e31a8855a282142b6ebb044ba38..48c6bdf12547937d1cd3419736a239ac7432791d 100644 (file)
@@ -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) {
index 7f5d984dbca3443464a57411e1bdf1ed10114647..badec642c666ad96fcdbd7fb6db8bbd3bc0fccf5 100644 (file)
@@ -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) {