diff options
author | 2010-10-20 06:51:26 +0000 | |
---|---|---|
committer | 2010-10-20 06:51:26 +0000 | |
commit | da123642b93ce078555db49b37e7146bffed8fc1 (patch) | |
tree | 2b4f5dbbe7f61cbb9df8d26270b8a651f722e6c1 /usr.bin/cvs/rcsparse.c | |
parent | grow i386 inside media a teeny bit (diff) | |
download | wireguard-openbsd-da123642b93ce078555db49b37e7146bffed8fc1.tar.xz wireguard-openbsd-da123642b93ce078555db49b37e7146bffed8fc1.zip |
Prevent a NULL pointer dereference if rcsparse_deltatexts is called with
a revision not specified as delta in an RCS file.
Spotted by and ok zinovik
Diffstat (limited to 'usr.bin/cvs/rcsparse.c')
-rw-r--r-- | usr.bin/cvs/rcsparse.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/usr.bin/cvs/rcsparse.c b/usr.bin/cvs/rcsparse.c index 7b3de255e68..c9df8c4e460 100644 --- a/usr.bin/cvs/rcsparse.c +++ b/usr.bin/cvs/rcsparse.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rcsparse.c,v 1.1 2010/10/15 08:44:12 tobias Exp $ */ +/* $OpenBSD: rcsparse.c,v 1.2 2010/10/20 06:51:26 tobias Exp $ */ /* * Copyright (c) 2010 Tobias Stoeckmann <tobias@openbsd.org> * @@ -313,15 +313,13 @@ rcsparse_deltatexts(RCSFILE *rfp, RCSNUM *rev) if (!(rfp->rf_flags & PARSED_DESC)) if (rcsparse_desc(rfp)) return (1); + + rdp = (rev != NULL) ? rcs_findrev(rfp, rev) : NULL; + for (;;) { - if (rev != NULL) { - rdp = rcs_findrev(rfp, rev); - if (rdp->rd_text != NULL) - break; - else - ret = rcsparse_deltatext(rfp); - } else - ret = rcsparse_deltatext(rfp); + if (rdp != NULL && rdp->rd_text != NULL) + break; + ret = rcsparse_deltatext(rfp); if (ret == 0) { rfp->rf_flags |= PARSED_DELTATEXTS; break; |