summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--usr.bin/cvs/diff3.c11
-rw-r--r--usr.bin/diff3/diff3prog.c11
-rw-r--r--usr.bin/rcs/diff3.c13
3 files changed, 28 insertions, 7 deletions
diff --git a/usr.bin/cvs/diff3.c b/usr.bin/cvs/diff3.c
index e8e0512d85a..f0fee1c1925 100644
--- a/usr.bin/cvs/diff3.c
+++ b/usr.bin/cvs/diff3.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: diff3.c,v 1.63 2019/06/28 13:35:00 deraadt Exp $ */
+/* $OpenBSD: diff3.c,v 1.64 2020/06/26 07:28:47 stsp Exp $ */
/*
* Copyright (C) Caldera International Inc. 2001-2002.
@@ -798,9 +798,16 @@ edscript(int n)
diff_output("%da\n=======\n", de[n].old.to -1);
(void)fseek(fp[2], (long)de[n].new.from, SEEK_SET);
for (k = de[n].new.to-de[n].new.from; k > 0; k-= j) {
+ size_t r;
j = k > BUFSIZ ? BUFSIZ : k;
- if (fread(block, 1, j, fp[2]) != (size_t)j)
+ r = fread(block, 1, j, fp[2]);
+ if (r == 0) {
+ if (feof(fp[2]))
+ break;
return (-1);
+ }
+ if (r != (size_t)j)
+ j = r;
block[j] = '\0';
diff_output("%s", block);
}
diff --git a/usr.bin/diff3/diff3prog.c b/usr.bin/diff3/diff3prog.c
index 992037b6d85..a56bfc7ce7a 100644
--- a/usr.bin/diff3/diff3prog.c
+++ b/usr.bin/diff3/diff3prog.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: diff3prog.c,v 1.19 2016/10/18 21:06:52 millert Exp $ */
+/* $OpenBSD: diff3prog.c,v 1.20 2020/06/26 07:28:47 stsp Exp $ */
/*
* Copyright (C) Caldera International Inc. 2001-2002.
@@ -555,9 +555,16 @@ edscript(int n)
printf("%da\n=======\n", de[n].old.to -1);
(void)fseek(fp[2], (long)de[n].new.from, SEEK_SET);
for (k = de[n].new.to-de[n].new.from; k > 0; k-= j) {
+ size_t r;
j = k > BUFSIZ ? BUFSIZ : k;
- if (fread(block, 1, j, fp[2]) != j)
+ r = fread(block, 1, j, fp[2]);
+ if (r == 0) {
+ if (feof(fp[2]))
+ break;
trouble();
+ }
+ if (r != j)
+ j = r;
(void)fwrite(block, 1, j, stdout);
}
if (!oflag || !overlap[n])
diff --git a/usr.bin/rcs/diff3.c b/usr.bin/rcs/diff3.c
index 38d41c19e02..ebe04a3b705 100644
--- a/usr.bin/rcs/diff3.c
+++ b/usr.bin/rcs/diff3.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: diff3.c,v 1.43 2019/08/10 16:39:33 stsp Exp $ */
+/* $OpenBSD: diff3.c,v 1.44 2020/06/26 07:28:46 stsp Exp $ */
/*
* Copyright (C) Caldera International Inc. 2001-2002.
@@ -893,9 +893,16 @@ edscript(int n)
diff_output("%da\n=======\n", de[n].old.to -1);
(void)fseek(fp[2], (long)de[n].new.from, SEEK_SET);
for (k = de[n].new.to-de[n].new.from; k > 0; k-= j) {
+ size_t r;
j = k > BUFSIZ ? BUFSIZ : k;
- if (fread(block, 1, j, fp[2]) != (size_t)j)
- return (-1);
+ r = fread(block, 1, j, fp[2]);
+ if (r == 0) {
+ if (feof(fp[2]))
+ break;
+ return -1;
+ }
+ if (r != (size_t)j)
+ j = r;
block[j] = '\0';
diff_output("%s", block);
}