From 6d6bc99ad2238833152377b226695670bed4727a Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Thu, 30 Sep 2010 14:28:48 +0000 Subject: [PATCH] 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 --- usr.bin/csup/rcsparse.c | 8 ++++++++ 1 file changed, 8 insertions(+) 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);