aboutsummaryrefslogtreecommitdiff
path: root/usr.bin/csup
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2010-09-30 14:28:48 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2010-09-30 14:28:48 +0000
commit6d6bc99ad2238833152377b226695670bed4727a (patch)
tree8424cb71328d819abe9dff490c5772fa08ee96d6 /usr.bin/csup
parent72da54703735a4e4511974691ff8f30b1fc910fb (diff)
downloadsrc-6d6bc99ad2238833152377b226695670bed4727a.tar.gz
src-6d6bc99ad2238833152377b226695670bed4727a.zip
If an RCS file is truncated, rcsfile_getdelta() will return NULL. Instead
of faulting, check for NULL. However, returning an error would cause csup to just abort the entire update. Instead, break out of the loop and return ok. The attempts to update the file will trigger a MD5 failure which will cause csup to download the entire file as a fixup. Reviewed by: lulf MFC after: 1 week
Notes
Notes: svn path=/head/; revision=213300
Diffstat (limited to 'usr.bin/csup')
-rw-r--r--usr.bin/csup/rcsparse.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/usr.bin/csup/rcsparse.c b/usr.bin/csup/rcsparse.c
index 5ea690ccde36..248d0ab4e49a 100644
--- a/usr.bin/csup/rcsparse.c
+++ b/usr.bin/csup/rcsparse.c
@@ -318,6 +318,14 @@ parse_deltatexts(struct rcsfile *rf, yyscan_t *sp, int token)
d = rcsfile_getdelta(rf, revnum);
free(revnum);
+ /*
+ * XXX: The RCS file is corrupt, but lie and say it is ok.
+ * If it is actually broken, then the MD5 mismatch will
+ * trigger a fixup.
+ */
+ if (d == NULL)
+ return (0);
+
/* log string */
asserttoken(sp, KEYWORD);
asserttoken(sp, STRING);