Hi,

as jsg@ pointed out, rcs will segfault reliably when using malloc.conf with
'J' (the pointer in question is filled with d0's).

The pointer "rp_delta" is checked at the end of rcsparse_delta.  If it's
non-NULL, it will be included into a linked list; line 1181 of rcsparse.c.

This RCS file triggers the segfault, as supplied by jsg@:
----------
head    1.1;
access;
symbols
        OPENBSD_5_6_BASE:1.1;
locks; strict;
comment @# @;


@.1
date    95.12.18.15.18.15;      author deraadt; state Exp;
branches:
n
----------

$ rlog foo,v
rlog: foo,v:9: no newline at end of file
Segmentation fault (core dumped)


Tobias

Index: usr.bin/cvs/rcsparse.c
===================================================================
RCS file: /cvs/src/usr.bin/cvs/rcsparse.c,v
retrieving revision 1.8
diff -u -p -u -p -r1.8 rcsparse.c
--- usr.bin/cvs/rcsparse.c      16 Nov 2014 19:14:34 -0000      1.8
+++ usr.bin/cvs/rcsparse.c      22 Nov 2014 10:32:32 -0000
@@ -228,6 +228,7 @@ rcsparse_init(RCSFILE *rfp)
        pdp->rp_buf = xmalloc(RCS_BUFSIZE);
        pdp->rp_blen = RCS_BUFSIZE;
        pdp->rp_bufend = pdp->rp_buf + pdp->rp_blen - 1;
+       pdp->rp_delta = NULL;
        pdp->rp_token = -1;
        pdp->rp_lineno = 1;
        pdp->rp_msglineno = 1;
Index: usr.bin/rcs/rcsparse.c
===================================================================
RCS file: /cvs/src/usr.bin/rcs/rcsparse.c,v
retrieving revision 1.11
diff -u -p -u -p -r1.11 rcsparse.c
--- usr.bin/rcs/rcsparse.c      16 Nov 2014 19:14:34 -0000      1.11
+++ usr.bin/rcs/rcsparse.c      22 Nov 2014 10:32:32 -0000
@@ -227,6 +227,7 @@ rcsparse_init(RCSFILE *rfp)
        pdp->rp_buf = xmalloc(RCS_BUFSIZE);
        pdp->rp_blen = RCS_BUFSIZE;
        pdp->rp_bufend = pdp->rp_buf + pdp->rp_blen - 1;
+       pdp->rp_delta = NULL;
        pdp->rp_token = -1;
        pdp->rp_lineno = 1;
        pdp->rp_msglineno = 1;

Reply via email to