From 4b76652eff2b6f7d23c800dbc48c509792c726b3 Mon Sep 17 00:00:00 2001 From: Michael Forney Date: Wed, 28 Apr 2021 01:41:26 -0700 Subject: [PATCH] dd: Always move excess to beginning of buffer after read/write loops Otherwise, while we may have enough room for at least one input block, we may not have enough room for an output block. --- dd.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/dd.c b/dd.c index 5522db5..6061048 100644 --- a/dd.c +++ b/dd.c @@ -222,11 +222,10 @@ main(int argc, char *argv[]) ofull++; opos += ret; } while ((eof && ipos < opos) || (!eof && ipos - opos >= obs)); - if (len - ipos < ibs) { + if (opos < ipos) memmove(buf, buf + opos, ipos - opos); - ipos -= opos; - opos = 0; - } + ipos -= opos; + opos = 0; } summary();