wok-next rev 20586
Up cvs, apply patches
line diff
1.1 --- a/cvs/receipt Sat Apr 14 11:20:34 2018 +0300 1.2 +++ b/cvs/receipt Sat Apr 14 14:19:43 2018 +0300 1.3 @@ -6,38 +6,38 @@ 1.4 SHORT_DESC="Concurrent Versions System" 1.5 MAINTAINER="erjo@slitaz.org" 1.6 LICENSE="GPL" 1.7 -WEB_SITE="http://ximbiot.com/cvs/" 1.8 +WEB_SITE="http://cvs.nongnu.org/" 1.9 1.10 TARBALL="$PACKAGE-$VERSION.tar.bz2" 1.11 WGET_URL="http://ftp.gnu.org/non-gnu/cvs/source/stable/$VERSION/$TARBALL" 1.12 1.13 +BUILD_DEPENDS="automake perl krb5-dev texinfo zlib-dev" 1.14 SPLIT="cvs-contrib" 1.15 1.16 compile_rules() { 1.17 - ./configure \ 1.18 - -C \ 1.19 - --prefix=/usr \ 1.20 - --with-ssh \ 1.21 - --mandir=/usr/share/man \ 1.22 - $CONFIGURE_ARGS && 1.23 + unset EDITOR VISUAL 1.24 + sed -i -e 's/AM_CONFIG_HEADER/AC_CONFIG_HEADERS/' configure.in 1.25 + find . -name Makefile.am | xargs sed -i -e 's/^INCLUDES/AM_CPPFLAGS/' 1.26 + AUTOMAKE='automake --add-missing' autoreconf 1.27 + 1.28 + ./configure && 1.29 make && 1.30 - make DESTDIR=$DESTDIR install 1.31 + make DESTDIR=$install install && 1.32 + 1.33 + rm $install/usr/share/info/dir 1.34 } 1.35 1.36 genpkg_rules() { 1.37 case $PACKAGE in 1.38 cvs) 1.39 - mkdir -p $fs/usr/bin 1.40 - cp -a $install/usr/bin/cvs* $fs/usr/bin 1.41 - DEPENDS="libcomerr libcomerr3 openssl libkrb5" 1.42 + copy cvs cvsbug 1.43 + DEPENDS="libkrb5 zlib" 1.44 TAGS="version-control versioning" 1.45 ;; 1.46 cvs-contrib) 1.47 - mkdir -p $fs/usr/share 1.48 - cp -a $install/usr/share/cvs $fs/usr/share 1.49 - rm -f $fs/usr/share/cvs/contrib/intro.doc 1.50 + copy contrib/ rcs2log 1.51 + rm $fs/usr/share/cvs/contrib/intro.doc 1.52 CAT="development|contrib utilities" 1.53 - DEPENDS="libcomerr openssl libkrb5" 1.54 ;; 1.55 esac 1.56 }
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/cvs/stuff/patches/cvs-1.11.19-abortabort.patch Sat Apr 14 14:19:43 2018 +0300 2.3 @@ -0,0 +1,70 @@ 2.4 +--- cvs-1.11.19/src/server.c.old3 2004-09-24 21:59:08.000000000 +0200 2.5 ++++ cvs-1.11.19/src/server.c 2005-02-28 13:09:22.000000000 +0100 2.6 +@@ -4900,6 +4900,15 @@ 2.7 + int status; 2.8 + int save_noexec; 2.9 + 2.10 ++#ifndef DONT_USE_SIGNALS 2.11 ++#ifdef SIGABRT 2.12 ++ /* Need to deregister the SIGABRT handler so that if an assertion 2.13 ++ fails and calls abort while we're cleaning up, we won't 2.14 ++ infinitely recurse in the cleanup function. */ 2.15 ++ SIG_deregister(SIGABRT, server_cleanup); 2.16 ++#endif 2.17 ++#endif /* !DONT_USE_SIGNALS */ 2.18 ++ 2.19 + if (buf_to_net != NULL) 2.20 + { 2.21 + /* Since we're done, go ahead and put BUF_TO_NET back into blocking 2.22 +--- cvs-1.11.19/src/main.c.old3 2005-02-03 15:50:51.000000000 +0100 2.23 ++++ cvs-1.11.19/src/main.c 2005-02-28 13:02:52.000000000 +0100 2.24 +@@ -341,6 +341,13 @@ 2.25 + const char *name; 2.26 + char temp[10]; 2.27 + 2.28 ++#ifdef SIGABRT 2.29 ++ /* Need to deregister the SIGABRT handler so that if an assertion 2.30 ++ fails and calls abort while we're cleaning up, we won't 2.31 ++ infinitely recurse in the cleanup function. */ 2.32 ++ SIG_deregister(SIGABRT, main_cleanup); 2.33 ++#endif 2.34 ++ 2.35 + switch (sig) 2.36 + { 2.37 + #ifdef SIGABRT 2.38 +--- cvs-1.11.19/src/rcs.c.old3 2005-01-31 23:15:08.000000000 +0100 2.39 ++++ cvs-1.11.19/src/rcs.c 2005-02-28 13:06:06.000000000 +0100 2.40 +@@ -8314,6 +8314,15 @@ 2.41 + called from a signal handler, so we don't know whether the 2.42 + files got created. */ 2.43 + 2.44 ++#ifndef DONT_USE_SIGNALS 2.45 ++#ifdef SIGABRT 2.46 ++ /* Need to deregister the SIGABRT handler so that if an assertion 2.47 ++ fails and calls abort while we're cleaning up, we won't 2.48 ++ infinitely recurse in the cleanup function. */ 2.49 ++ SIG_deregister(SIGABRT, rcs_cleanup); 2.50 ++#endif 2.51 ++#endif /* !DONT_USE_SIGNALS */ 2.52 ++ 2.53 + /* FIXME: Do not perform buffered I/O from an interrupt handler like 2.54 + this (via error). However, I'm leaving the error-calling code there 2.55 + in the hope that on the rare occasion the error call is actually made 2.56 +--- cvs-1.11.19/src/patch.c.old3 2005-01-31 23:15:02.000000000 +0100 2.57 ++++ cvs-1.11.19/src/patch.c 2005-02-28 13:04:16.000000000 +0100 2.58 +@@ -796,6 +796,15 @@ 2.59 + called from a signal handler, without SIG_begincrsect, so 2.60 + we don't know whether the files got created. */ 2.61 + 2.62 ++#ifndef DONT_USE_SIGNALS 2.63 ++#ifdef SIGABRT 2.64 ++ /* Need to deregister the SIGABRT handler so that if an assertion 2.65 ++ fails and calls abort while we're cleaning up, we won't 2.66 ++ infinitely recurse in the cleanup function. */ 2.67 ++ SIG_deregister(SIGABRT, patch_cleanup); 2.68 ++#endif 2.69 ++#endif /* !DONT_USE_SIGNALS */ 2.70 ++ 2.71 + if (tmpfile1 != NULL) 2.72 + { 2.73 + if (unlink_file (tmpfile1) < 0
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/cvs/stuff/patches/cvs-1.11.19-comp.patch Sat Apr 14 14:19:43 2018 +0300 3.3 @@ -0,0 +1,11 @@ 3.4 +--- cvs-1.11.19/src/rcs.c.old 2005-03-17 11:21:18.000000000 +0100 3.5 ++++ cvs-1.11.19/src/rcs.c 2005-03-17 11:21:56.000000000 +0100 3.6 +@@ -138,7 +138,7 @@ 3.7 + string comparisons. This macro speeds things up a bit by skipping 3.8 + the function call when the first characters are different. It 3.9 + evaluates its arguments multiple times. */ 3.10 +-#define STREQ(a, b) (*(char *)(a) == *(char *)(b) && strcmp ((a), (b)) == 0) 3.11 ++#define STREQ(a, b) ((a) != NULL && (b) != NULL && *(char *)(a) == *(char *)(b) && strcmp ((a), (b)) == 0) 3.12 + 3.13 + /* 3.14 + * We don't want to use isspace() from the C library because:
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 4.2 +++ b/cvs/stuff/patches/cvs-1.11.19-extzlib.patch Sat Apr 14 14:19:43 2018 +0300 4.3 @@ -0,0 +1,44 @@ 4.4 +--- cvs-1.11.19/configure.in.old.old4 2005-02-01 00:10:49.000000000 +0100 4.5 ++++ cvs-1.11.19/configure.in 2005-02-28 13:27:10.000000000 +0100 4.6 +@@ -1040,8 +1040,8 @@ 4.7 + tools/Makefile \ 4.8 + vms/Makefile \ 4.9 + windows-NT/Makefile \ 4.10 +- windows-NT/SCC/Makefile \ 4.11 +- zlib/Makefile]) 4.12 ++ windows-NT/SCC/Makefile 4.13 ++ ]) 4.14 + 4.15 + dnl and we're done 4.16 + AC_OUTPUT 4.17 +--- cvs-1.11.19/Makefile.am.old.old4 2004-11-11 23:30:36.000000000 +0100 4.18 ++++ cvs-1.11.19/Makefile.am 2005-02-28 13:25:32.000000000 +0100 4.19 +@@ -17,7 +17,7 @@ 4.20 + ## Subdirectories to run make in for the primary targets. 4.21 + # Unix source subdirs, where we'll want to run lint and etags: 4.22 + # This is a legacy variable from b4 Automake 4.23 +-USOURCE_SUBDIRS = lib zlib diff src 4.24 ++USOURCE_SUBDIRS = lib diff src 4.25 + # All other subdirs: 4.26 + SUBDIRS = $(USOURCE_SUBDIRS) man doc contrib tools \ 4.27 + windows-NT os2 emx vms 4.28 +--- cvs-1.11.19/src/Makefile.am.old.old4 2005-01-31 23:07:35.000000000 +0100 4.29 ++++ cvs-1.11.19/src/Makefile.am 2005-02-28 13:24:26.000000000 +0100 4.30 +@@ -24,7 +24,7 @@ 4.31 + # try and remove naming ocnflicts and fix Automake to allow particular includes 4.32 + # to be attached only to particular object files. Short term fix is either or. 4.33 + ##INCLUDES = -I. -I.. -I$(srcdir) -I$(top_srcdir)/lib 4.34 +-INCLUDES = -I$(top_srcdir)/lib -I$(top_srcdir)/diff -I$(top_srcdir)/zlib $(includeopt) 4.35 ++INCLUDES = -I$(top_srcdir)/lib -I$(top_srcdir)/diff $(includeopt) 4.36 + 4.37 + bin_PROGRAMS = cvs 4.38 + bin_SCRIPTS = cvsbug 4.39 +@@ -105,7 +105,7 @@ 4.40 + cvs_LDADD = \ 4.41 + ../diff/libdiff.a \ 4.42 + ../lib/libcvs.a \ 4.43 +- ../zlib/libz.a 4.44 ++ -lz 4.45 + 4.46 + # extra clean targets 4.47 + # wish this could be distclean-hdr-local but it's not part of automake
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 5.2 +++ b/cvs/stuff/patches/cvs-1.11.19-logmsg.patch Sat Apr 14 14:19:43 2018 +0300 5.3 @@ -0,0 +1,20 @@ 5.4 +--- cvs-1.11.19/src/logmsg.c.old 2005-03-09 10:45:50.000000000 +0100 5.5 ++++ cvs-1.11.19/src/logmsg.c 2005-03-09 10:46:36.000000000 +0100 5.6 +@@ -230,6 +230,8 @@ 5.7 + if ((*messagep)[0] == '\0' || 5.8 + (*messagep)[strlen (*messagep) - 1] != '\n') 5.9 + (void) fprintf (fp, "\n"); 5.10 ++ } else { 5.11 ++ (void) fprintf (fp, "\n"); 5.12 + } 5.13 + 5.14 + if (repository != NULL) 5.15 +@@ -271,7 +273,7 @@ 5.16 + } 5.17 + 5.18 + (void) fprintf (fp, 5.19 +- "\n%s----------------------------------------------------------------------\n", 5.20 ++ "%s----------------------------------------------------------------------\n", 5.21 + CVSEDITPREFIX); 5.22 + (void) fprintf (fp, 5.23 + "%sEnter Log. Lines beginning with `%.*s' are removed automatically\n%s\n",
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 6.2 +++ b/cvs/stuff/patches/cvs-1.11.19-netbsd-tag.patch Sat Apr 14 14:19:43 2018 +0300 6.3 @@ -0,0 +1,28 @@ 6.4 +--- cvs-1.11.19/src/logmsg.c.old2 2005-02-28 11:49:35.000000000 +0100 6.5 ++++ cvs-1.11.19/src/logmsg.c 2005-02-28 12:58:16.000000000 +0100 6.6 +@@ -690,6 +690,15 @@ 6.7 + strlen (str_list) + strlen (p->key) + 5); 6.8 + (void) strcat (str_list, p->key); 6.9 + break; 6.10 ++ case 't': 6.11 ++ str_list = 6.12 ++ xrealloc (str_list, 6.13 ++ (strlen (str_list) 6.14 ++ + (li->tag ? strlen (li->tag) : 0) 6.15 ++ + 10) 6.16 ++ ); 6.17 ++ (void) strcat (str_list, (li->tag ? li->tag : "")); 6.18 ++ break; 6.19 + case 'V': 6.20 + str_list = 6.21 + xrealloc (str_list, 6.22 +--- cvs-1.11.19/src/mkmodules.c.old2 2005-01-31 23:14:17.000000000 +0100 6.23 ++++ cvs-1.11.19/src/mkmodules.c 2005-02-28 12:59:03.000000000 +0100 6.24 +@@ -74,6 +74,7 @@ 6.25 + "# s = file name\n", 6.26 + "# V = old version number (pre-checkin)\n", 6.27 + "# v = new version number (post-checkin)\n", 6.28 ++ "# t = tag or branch name\n", 6.29 + "#\n", 6.30 + "# For example:\n", 6.31 + "#DEFAULT (echo \"\"; id; echo %s; date; cat) >> $CVSROOT/CVSROOT/commitlog\n",
7.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 7.2 +++ b/cvs/stuff/patches/cvs-1.11.19-tagname.patch Sat Apr 14 14:19:43 2018 +0300 7.3 @@ -0,0 +1,11 @@ 7.4 +--- cvs-1.11.19/src/rcs.c.old 2005-03-14 13:09:39.000000000 +0100 7.5 ++++ cvs-1.11.19/src/rcs.c 2005-03-14 13:08:24.000000000 +0100 7.6 +@@ -3382,7 +3382,7 @@ 7.7 + RCS_check_tag (tag) 7.8 + const char *tag; 7.9 + { 7.10 +- char *invalid = "$,.:;@"; /* invalid RCS tag characters */ 7.11 ++ char *invalid = "$,.:;@/"; /* invalid RCS tag characters */ 7.12 + const char *cp; 7.13 + 7.14 + /*
8.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 8.2 +++ b/cvs/stuff/patches/cvs-1.11.19-tmp.patch Sat Apr 14 14:19:43 2018 +0300 8.3 @@ -0,0 +1,19 @@ 8.4 +--- cvs-1.11.19/src/cvsbug.in.old 2004-02-03 15:37:52.000000000 +0100 8.5 ++++ cvs-1.11.19/src/cvsbug.in 2005-08-22 16:35:06.000000000 +0200 8.6 +@@ -109,14 +109,14 @@ 8.7 + /usr/bin/ypcat passwd 2>/dev/null | cat - /etc/passwd | grep "^$LOGNAME:" | 8.8 + cut -f5 -d':' | sed -e 's/,.*//' > $TEMP 8.9 + ORIGINATOR="`cat $TEMP`" 8.10 +- rm -f $TEMP 8.11 ++ > $TEMP 8.12 + fi 8.13 + fi 8.14 + 8.15 + if [ "$ORIGINATOR" = "" ]; then 8.16 + grep "^$LOGNAME:" /etc/passwd | cut -f5 -d':' | sed -e 's/,.*//' > $TEMP 8.17 + ORIGINATOR="`cat $TEMP`" 8.18 +- rm -f $TEMP 8.19 ++ > $TEMP 8.20 + fi 8.21 + 8.22 + if [ -n "$ORGANIZATION" ]; then
9.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 9.2 +++ b/cvs/stuff/patches/cvs-1.11.21-diff-kk.patch Sat Apr 14 14:19:43 2018 +0300 9.3 @@ -0,0 +1,11 @@ 9.4 +--- cvs-1.11.21/src/diff.c.old 2005-12-19 11:01:59.000000000 +0100 9.5 ++++ cvs-1.11.21/src/diff.c 2005-12-21 15:45:40.000000000 +0100 9.6 +@@ -438,7 +438,7 @@ 9.7 + 9.8 + /* Send the current files unless diffing two revs from the archive */ 9.9 + if (diff_rev2 == NULL && diff_date2 == NULL) 9.10 +- send_files (argc, argv, local, 0, 0); 9.11 ++ send_files (argc, argv, local, 0, options[0] == '\0' ? 0 : SEND_FORCE); 9.12 + else 9.13 + send_files (argc, argv, local, 0, SEND_NO_CONTENTS); 9.14 +
10.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 10.2 +++ b/cvs/stuff/patches/cvs-1.11.21-diff.patch Sat Apr 14 14:19:43 2018 +0300 10.3 @@ -0,0 +1,21 @@ 10.4 +--- cvs-1.11.21/src/diff.c.old 2005-05-27 19:17:03.000000000 +0200 10.5 ++++ cvs-1.11.21/src/diff.c 2005-12-15 15:22:05.000000000 +0100 10.6 +@@ -955,14 +955,16 @@ 10.7 + /* The first revision does not exist. If EMPTY_FILES is 10.8 + true, treat this as an added file. Otherwise, warn 10.9 + about the missing tag. */ 10.10 +- if( use_rev2 == NULL || RCS_isdead( vers->srcfile, use_rev2 ) ) 10.11 ++ if( use_rev2 == NULL || RCS_isdead( vers->srcfile, use_rev2 ) ) { 10.12 + /* At least in the case where DIFF_REV1 and DIFF_REV2 10.13 + * are both numeric (and non-existant (NULL), as opposed to 10.14 + * dead?), we should be returning some kind of error (see 10.15 + * basicb-8a0 in testsuite). The symbolic case may be more 10.16 + * complicated. 10.17 + */ 10.18 +- return DIFF_SAME; 10.19 ++ error (0, 0, "no revision in file %s or missing file %s", finfo->fullname, finfo->fullname); 10.20 ++ return DIFF_ERROR; 10.21 ++ } 10.22 + if( empty_files ) 10.23 + return DIFF_ADDED; 10.24 + if( use_rev1 != NULL )
11.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 11.2 +++ b/cvs/stuff/patches/cvs-1.11.21-sort.patch Sat Apr 14 14:19:43 2018 +0300 11.3 @@ -0,0 +1,12 @@ 11.4 +--- cvs-1.11.21/contrib/rcs2log.sh.old 2005-08-02 22:46:43.000000000 +0200 11.5 ++++ cvs-1.11.21/contrib/rcs2log.sh 2006-05-09 11:49:10.000000000 +0200 11.6 +@@ -68,6 +68,9 @@ 11.7 + For more information about these matters, see the files named COPYING. 11.8 + Author: Paul Eggert <eggert@twinsun.com>' 11.9 + 11.10 ++# set old environment for sort (bug #190009) 11.11 ++export _POSIX2_VERSION=199209 11.12 ++ 11.13 + # functions 11.14 + @MKTEMP_SH_FUNCTION@ 11.15 +
12.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 12.2 +++ b/cvs/stuff/patches/cvs-1.11.23-Pass-compilation-with-Wformat-security.patch Sat Apr 14 14:19:43 2018 +0300 12.3 @@ -0,0 +1,73 @@ 12.4 +From 52093add7b3f38156e632fa81fcf1c0b6ad4d549 Mon Sep 17 00:00:00 2001 12.5 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com> 12.6 +Date: Tue, 3 Dec 2013 15:11:14 +0100 12.7 +Subject: [PATCH] Pass compilation with -Wformat-security 12.8 +MIME-Version: 1.0 12.9 +Content-Type: text/plain; charset=UTF-8 12.10 +Content-Transfer-Encoding: 8bit 12.11 + 12.12 +Signed-off-by: Petr Písař <ppisar@redhat.com> 12.13 +--- 12.14 + diff/diff3.c | 2 +- 12.15 + src/main.c | 2 +- 12.16 + src/subr.c | 12 ++++-------- 12.17 + 3 files changed, 6 insertions(+), 10 deletions(-) 12.18 + 12.19 +diff --git a/diff/diff3.c b/diff/diff3.c 12.20 +index 006039f..e9418ce 100644 12.21 +--- a/diff/diff3.c 12.22 ++++ b/diff/diff3.c 12.23 +@@ -1505,7 +1505,7 @@ output_diff3 (diff, mapping, rev_mapping) 12.24 + line = 0; 12.25 + do 12.26 + { 12.27 +- printf_output (line_prefix); 12.28 ++ printf_output ("%s", line_prefix); 12.29 + cp = D_RELNUM (ptr, realfile, line); 12.30 + length = D_RELLEN (ptr, realfile, line); 12.31 + write_output (cp, length); 12.32 +diff --git a/src/main.c b/src/main.c 12.33 +index 24a6e6f..e7f0439 100644 12.34 +--- a/src/main.c 12.35 ++++ b/src/main.c 12.36 +@@ -1154,6 +1154,6 @@ usage (cpp) 12.37 + { 12.38 + (void) fprintf (stderr, *cpp++, program_name, cvs_cmd_name); 12.39 + for (; *cpp; cpp++) 12.40 +- (void) fprintf (stderr, *cpp); 12.41 ++ (void) fprintf (stderr, "%s", *cpp); 12.42 + error_exit (); 12.43 + } 12.44 +diff --git a/src/subr.c b/src/subr.c 12.45 +index 0725503..94907ce 100644 12.46 +--- a/src/subr.c 12.47 ++++ b/src/subr.c 12.48 +@@ -46,10 +46,8 @@ xmalloc (bytes) 12.49 + cp = malloc (bytes); 12.50 + if (cp == NULL) 12.51 + { 12.52 +- char buf[80]; 12.53 +- sprintf (buf, "out of memory; can not allocate %lu bytes", 12.54 +- (unsigned long) bytes); 12.55 +- error (1, 0, buf); 12.56 ++ error (1, 0, "out of memory; can not allocate %lu bytes", 12.57 ++ (unsigned long) bytes); 12.58 + } 12.59 + return (cp); 12.60 + } 12.61 +@@ -73,10 +71,8 @@ xrealloc (ptr, bytes) 12.62 + 12.63 + if (cp == NULL) 12.64 + { 12.65 +- char buf[80]; 12.66 +- sprintf (buf, "out of memory; can not reallocate %lu bytes", 12.67 +- (unsigned long) bytes); 12.68 +- error (1, 0, buf); 12.69 ++ error (1, 0, "out of memory; can not reallocate %lu bytes", 12.70 ++ (unsigned long) bytes); 12.71 + } 12.72 + return (cp); 12.73 + } 12.74 +-- 12.75 +1.8.3.1 12.76 +
13.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 13.2 +++ b/cvs/stuff/patches/cvs-1.11.23-cve-2010-3846.patch Sat Apr 14 14:19:43 2018 +0300 13.3 @@ -0,0 +1,167 @@ 13.4 +From b122edcb68ff05bb6eb22f6e50423e7f1050841b Mon Sep 17 00:00:00 2001 13.5 +From: Larry Jones <lawrence.jones@siemens.com> 13.6 +Date: Thu, 21 Oct 2010 10:08:16 +0200 13.7 +Subject: [PATCH] Fix for CVE-2010-3846 13.8 +MIME-Version: 1.0 13.9 +Content-Type: text/plain; charset=UTF-8 13.10 +Content-Transfer-Encoding: 8bit 13.11 + 13.12 +Mallformed RCS revision (delete after the end of input file, or overlayed 13.13 +deleted regions) screws output file image size computation. This leads to 13.14 +write attempt after the allocated memory opening hiden memory corruption 13.15 +driven by CVS server. 13.16 + 13.17 +Signed-off-by: Petr Písař <ppisar@redhat.com> 13.18 +--- 13.19 + src/rcs.c | 52 +++++++++++++++++++++++++++++----------------------- 13.20 + 1 files changed, 29 insertions(+), 23 deletions(-) 13.21 + 13.22 +diff --git a/src/rcs.c b/src/rcs.c 13.23 +index 7d0d078..2f88f85 100644 13.24 +--- a/src/rcs.c 13.25 ++++ b/src/rcs.c 13.26 +@@ -7128,7 +7128,7 @@ apply_rcs_changes (orig_lines, diffbuf, difflen, name, addvers, delvers) 13.27 + struct deltafrag *dfhead; 13.28 + struct deltafrag **dftail; 13.29 + struct deltafrag *df; 13.30 +- unsigned long numlines, lastmodline, offset; 13.31 ++ unsigned long numlines, offset; 13.32 + struct linevector lines; 13.33 + int err; 13.34 + 13.35 +@@ -7202,12 +7202,12 @@ apply_rcs_changes (orig_lines, diffbuf, difflen, name, addvers, delvers) 13.36 + 13.37 + /* New temp data structure to hold new org before 13.38 + copy back into original structure. */ 13.39 +- lines.nlines = lines.lines_alloced = numlines; 13.40 ++ lines.lines_alloced = numlines; 13.41 + lines.vector = xmalloc (numlines * sizeof *lines.vector); 13.42 + 13.43 + /* We changed the list order to first to last -- so the 13.44 + list never gets larger than the size numlines. */ 13.45 +- lastmodline = 0; 13.46 ++ lines.nlines = 0; 13.47 + 13.48 + /* offset created when adding/removing lines 13.49 + between new and original structure */ 13.50 +@@ -7216,25 +7216,24 @@ apply_rcs_changes (orig_lines, diffbuf, difflen, name, addvers, delvers) 13.51 + for (df = dfhead; df != NULL; ) 13.52 + { 13.53 + unsigned int ln; 13.54 +- unsigned long deltaend; 13.55 ++ unsigned long newpos = df->pos - offset; 13.56 + 13.57 +- if (df->pos > orig_lines->nlines) 13.58 ++ if (newpos < lines.nlines || newpos > numlines) 13.59 + err = 1; 13.60 + 13.61 + /* On error, just free the rest of the list. */ 13.62 + if (!err) 13.63 + { 13.64 +- /* Here we need to get to the line where the next insert will 13.65 ++ /* Here we need to get to the line where the next change will 13.66 + begin, which is DF->pos in ORIG_LINES. We will fill up to 13.67 + DF->pos - OFFSET in LINES with original items. */ 13.68 +- for (deltaend = df->pos - offset; 13.69 +- lastmodline < deltaend; 13.70 +- lastmodline++) 13.71 ++ while (lines.nlines < newpos) 13.72 + { 13.73 + /* we need to copy from the orig structure into new one */ 13.74 +- lines.vector[lastmodline] = 13.75 +- orig_lines->vector[lastmodline + offset]; 13.76 +- lines.vector[lastmodline]->refcount++; 13.77 ++ lines.vector[lines.nlines] = 13.78 ++ orig_lines->vector[lines.nlines + offset]; 13.79 ++ lines.vector[lines.nlines]->refcount++; 13.80 ++ lines.nlines++; 13.81 + } 13.82 + 13.83 + switch (df->type) 13.84 +@@ -7246,7 +7245,12 @@ apply_rcs_changes (orig_lines, diffbuf, difflen, name, addvers, delvers) 13.85 + struct line *q; 13.86 + int nextline_newline; 13.87 + size_t nextline_len; 13.88 +- 13.89 ++ 13.90 ++ if (newpos + df->nlines > numlines) 13.91 ++ { 13.92 ++ err = 1; 13.93 ++ break; 13.94 ++ } 13.95 + textend = df->new_lines + df->len; 13.96 + nextline_newline = 0; 13.97 + nextline_text = df->new_lines; 13.98 +@@ -7271,8 +7275,7 @@ apply_rcs_changes (orig_lines, diffbuf, difflen, name, addvers, delvers) 13.99 + q->has_newline = nextline_newline; 13.100 + q->refcount = 1; 13.101 + memcpy (q->text, nextline_text, nextline_len); 13.102 +- lines.vector[lastmodline++] = q; 13.103 +- offset--; 13.104 ++ lines.vector[lines.nlines++] = q; 13.105 + 13.106 + nextline_text = (char *)p + 1; 13.107 + nextline_newline = 0; 13.108 +@@ -7286,11 +7289,11 @@ apply_rcs_changes (orig_lines, diffbuf, difflen, name, addvers, delvers) 13.109 + q->has_newline = nextline_newline; 13.110 + q->refcount = 1; 13.111 + memcpy (q->text, nextline_text, nextline_len); 13.112 +- lines.vector[lastmodline++] = q; 13.113 ++ lines.vector[lines.nlines++] = q; 13.114 + 13.115 + /* For each line we add the offset between the #'s 13.116 + decreases. */ 13.117 +- offset--; 13.118 ++ offset -= df->nlines; 13.119 + break; 13.120 + } 13.121 + 13.122 +@@ -7301,7 +7304,9 @@ apply_rcs_changes (orig_lines, diffbuf, difflen, name, addvers, delvers) 13.123 + if (df->pos + df->nlines > orig_lines->nlines) 13.124 + err = 1; 13.125 + else if (delvers) 13.126 ++ { 13.127 + for (ln = df->pos; ln < df->pos + df->nlines; ++ln) 13.128 ++ { 13.129 + if (orig_lines->vector[ln]->refcount > 1) 13.130 + /* Annotate needs this but, since the original 13.131 + * vector is disposed of before returning from 13.132 +@@ -7309,6 +7314,8 @@ apply_rcs_changes (orig_lines, diffbuf, difflen, name, addvers, delvers) 13.133 + * there are multiple references. 13.134 + */ 13.135 + orig_lines->vector[ln]->vers = delvers; 13.136 ++ } 13.137 ++ } 13.138 + break; 13.139 + } 13.140 + } 13.141 +@@ -7328,21 +7335,20 @@ apply_rcs_changes (orig_lines, diffbuf, difflen, name, addvers, delvers) 13.142 + else 13.143 + { 13.144 + /* add the rest of the remaining lines to the data vector */ 13.145 +- for (; lastmodline < numlines; lastmodline++) 13.146 ++ while (lines.nlines < numlines) 13.147 + { 13.148 + /* we need to copy from the orig structure into new one */ 13.149 +- lines.vector[lastmodline] = orig_lines->vector[lastmodline 13.150 ++ lines.vector[lines.nlines] = orig_lines->vector[lines.nlines 13.151 + + offset]; 13.152 +- lines.vector[lastmodline]->refcount++; 13.153 ++ lines.vector[lines.nlines]->refcount++; 13.154 ++ lines.nlines++; 13.155 + } 13.156 + 13.157 + /* Move the lines vector to the original structure for output, 13.158 + * first deleting the old. 13.159 + */ 13.160 + linevector_free (orig_lines); 13.161 +- orig_lines->vector = lines.vector; 13.162 +- orig_lines->lines_alloced = numlines; 13.163 +- orig_lines->nlines = lines.nlines; 13.164 ++ *orig_lines = lines; 13.165 + } 13.166 + 13.167 + return !err; 13.168 +-- 13.169 +1.7.2.3 13.170 +
14.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 14.2 +++ b/cvs/stuff/patches/cvs-1.11.23-cvspass.patch Sat Apr 14 14:19:43 2018 +0300 14.3 @@ -0,0 +1,113 @@ 14.4 +From e4a25dba948af9211ffea6b27293fe15c4b3ba07 Mon Sep 17 00:00:00 2001 14.5 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com> 14.6 +Date: Wed, 4 Dec 2013 08:37:24 +0100 14.7 +Subject: [PATCH] Create ~/.cvspass at login if it does not exists 14.8 +MIME-Version: 1.0 14.9 +Content-Type: text/plain; charset=UTF-8 14.10 +Content-Transfer-Encoding: 8bit 14.11 + 14.12 +<https://bugzilla.redhat.com/show_bug.cgi?id=47457> 14.13 + 14.14 +Signed-off-by: Petr Písař <ppisar@redhat.com> 14.15 +--- 14.16 + src/login.c | 9 +++++++++ 14.17 + src/logmsg.c | 2 +- 14.18 + src/sanity.sh | 7 ++++++- 14.19 + 3 files changed, 16 insertions(+), 2 deletions(-) 14.20 + 14.21 +diff --git a/src/login.c b/src/login.c 14.22 +index 50b292b..75dc53a 100644 14.23 +--- a/src/login.c 14.24 ++++ b/src/login.c 14.25 +@@ -315,6 +315,15 @@ internal error: can only call password_entry_operation with pserver method"); 14.26 + fp = CVS_FOPEN (passfile, "r"); 14.27 + if (fp == NULL) 14.28 + { 14.29 ++ fp = CVS_FOPEN (passfile, "w"); 14.30 ++ if (fp != NULL) 14.31 ++ { 14.32 ++ fclose (fp); 14.33 ++ fp = CVS_FOPEN (passfile, "r"); 14.34 ++ } 14.35 ++ } 14.36 ++ if (fp == NULL) 14.37 ++ { 14.38 + error (0, errno, "warning: failed to open %s for reading", passfile); 14.39 + goto process; 14.40 + } 14.41 +diff --git a/src/logmsg.c b/src/logmsg.c 14.42 +index 741231b..0d4d6a2 100644 14.43 +--- a/src/logmsg.c 14.44 ++++ b/src/logmsg.c 14.45 +@@ -269,7 +269,7 @@ do_editor (dir, messagep, repository, changes) 14.46 + } 14.47 + 14.48 + (void) fprintf (fp, 14.49 +- "%s----------------------------------------------------------------------\n", 14.50 ++ "\n%s----------------------------------------------------------------------\n", 14.51 + CVSEDITPREFIX); 14.52 + (void) fprintf (fp, 14.53 + "%sEnter Log. Lines beginning with `%.*s' are removed automatically\n%s\n", 14.54 +diff --git a/src/sanity.sh b/src/sanity.sh 14.55 +index dbcae19..f119840 100755 14.56 +--- a/src/sanity.sh 14.57 ++++ b/src/sanity.sh 14.58 +@@ -4195,7 +4195,6 @@ ${PROG} commit: Rebuilding administrative file database" 14.59 + "$PROG logout: WARNING: Ignoring method options found in CVSROOT: \`proxy=localhost;proxyport=8080'\. 14.60 + $PROG logout: Use CVS version 1\.12\.7 or later to handle method options\. 14.61 + Logging out of :pserver:$username@localhost:2401/dev/null 14.62 +-$PROG logout: warning: failed to open $HOME/\.cvspass for reading: No such file or directory 14.63 + $PROG logout: Entry not found\." 14.64 + fi 14.65 + 14.66 +@@ -15552,6 +15551,7 @@ description: 14.67 + revision 1\.1 14.68 + date: [0-9/]* [0-9:]*; author: ${username}; state: Exp; 14.69 + branches: 1\.1\.2; 14.70 ++x 14.71 + xCVS: ---------------------------------------------------------------------- 14.72 + xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically 14.73 + xCVS: 14.74 +@@ -15563,6 +15563,7 @@ xCVS: ---------------------------------------------------------------------- 14.75 + ---------------------------- 14.76 + revision 1\.1\.2\.1 14.77 + date: [0-9/]* [0-9:]*; author: ${username}; state: Exp; lines: ${PLUS}1 -0 14.78 ++x 14.79 + xCVS: ---------------------------------------------------------------------- 14.80 + xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically 14.81 + xCVS: 14.82 +@@ -15590,6 +15591,7 @@ description: 14.83 + revision 1\.1 14.84 + date: [0-9/]* [0-9:]*; author: ${username}; state: Exp; 14.85 + branches: 1\.1\.2; 14.86 ++x 14.87 + xCVS: ---------------------------------------------------------------------- 14.88 + xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically 14.89 + xCVS: 14.90 +@@ -15601,6 +15603,7 @@ xCVS: ---------------------------------------------------------------------- 14.91 + ---------------------------- 14.92 + revision 1\.1\.2\.1 14.93 + date: [0-9/]* [0-9:]*; author: ${username}; state: Exp; lines: ${PLUS}1 -0 14.94 ++x 14.95 + xCVS: ---------------------------------------------------------------------- 14.96 + xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically 14.97 + xCVS: 14.98 +@@ -15622,6 +15625,7 @@ description: 14.99 + revision 1\.1 14.100 + date: [0-9/]* [0-9:]*; author: ${username}; state: Exp; 14.101 + branches: 1\.1\.2; 14.102 ++x 14.103 + xCVS: ---------------------------------------------------------------------- 14.104 + xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically 14.105 + xCVS: 14.106 +@@ -15633,6 +15637,7 @@ xCVS: ---------------------------------------------------------------------- 14.107 + ---------------------------- 14.108 + revision 1\.1\.2\.1 14.109 + date: [0-9/]* [0-9:]*; author: ${username}; state: Exp; lines: ${PLUS}1 -0 14.110 ++x 14.111 + xCVS: ---------------------------------------------------------------------- 14.112 + xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically 14.113 + xCVS: 14.114 +-- 14.115 +1.8.3.1 14.116 +
15.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 15.2 +++ b/cvs/stuff/patches/cvs-1.11.23-doc-Add-mandatory-argument-to-sp.patch Sat Apr 14 14:19:43 2018 +0300 15.3 @@ -0,0 +1,30 @@ 15.4 +From f40baecd3d09b1018185bcefde35464a79dbd68d Mon Sep 17 00:00:00 2001 15.5 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com> 15.6 +Date: Wed, 5 Jun 2013 08:38:11 +0200 15.7 +Subject: [PATCH] doc: Add mandatory argument to @sp 15.8 + 15.9 +Texinfo-5.1 fails if @sp macro is not followed by a number. The 15.10 +numeric argument is mandatory according to Texinfo documentation. 15.11 +--- 15.12 + doc/cvs.texinfo | 4 ++-- 15.13 + 1 file changed, 2 insertions(+), 2 deletions(-) 15.14 + 15.15 +diff --git a/doc/cvs.texinfo b/doc/cvs.texinfo 15.16 +index ad3a414..14bc79a 100644 15.17 +--- a/doc/cvs.texinfo 15.18 ++++ b/doc/cvs.texinfo 15.19 +@@ -111,9 +111,9 @@ approved by the Free Software Foundation. 15.20 + @sp 4 15.21 + @comment The title is printed in a large font. 15.22 + @center @titlefont{Version Management} 15.23 +-@sp 15.24 ++@sp 1 15.25 + @center @titlefont{with} 15.26 +-@sp 15.27 ++@sp 1 15.28 + @center @titlefont{CVS} 15.29 + @sp 2 15.30 + @center for @sc{cvs} @value{VERSION} 15.31 +-- 15.32 +1.8.1.4 15.33 +
16.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 16.2 +++ b/cvs/stuff/patches/cvs-1.11.23-getline64.patch Sat Apr 14 14:19:43 2018 +0300 16.3 @@ -0,0 +1,34 @@ 16.4 +--- cvs-1.11.23/lib/getline.c 2005-04-04 22:46:05.000000000 +0200 16.5 ++++ cvs-1.11.23/lib/getline.c.old 2008-06-03 19:06:25.000000000 +0200 16.6 +@@ -154,7 +154,7 @@ 16.7 + return ret; 16.8 + } 16.9 + 16.10 +-int 16.11 ++ssize_t 16.12 + getline (lineptr, n, stream) 16.13 + char **lineptr; 16.14 + size_t *n; 16.15 +@@ -163,7 +163,7 @@ 16.16 + return getstr (lineptr, n, stream, '\n', 0, GETLINE_NO_LIMIT); 16.17 + } 16.18 + 16.19 +-int 16.20 ++ssize_t 16.21 + getline_safe (lineptr, n, stream, limit) 16.22 + char **lineptr; 16.23 + size_t *n; 16.24 +--- cvs-1.11.23/lib/getline.h 2005-04-04 22:46:05.000000000 +0200 16.25 ++++ cvs-1.11.23/lib/getline.h.old 2008-06-03 19:06:27.000000000 +0200 16.26 +@@ -11,9 +11,9 @@ 16.27 + 16.28 + #define GETLINE_NO_LIMIT -1 16.29 + 16.30 +-int 16.31 ++ssize_t 16.32 + getline __PROTO ((char **_lineptr, size_t *_n, FILE *_stream)); 16.33 +-int 16.34 ++ssize_t 16.35 + getline_safe __PROTO ((char **_lineptr, size_t *_n, FILE *_stream, 16.36 + int limit)); 16.37 + int
17.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 17.2 +++ b/cvs/stuff/patches/cvs-1.11.23-make_make_check_sanity_testing_verbose.patch Sat Apr 14 14:19:43 2018 +0300 17.3 @@ -0,0 +1,30 @@ 17.4 +From f923e7c9dd4c71a1f6318d4d9fb0bdd4476ab6c5 Mon Sep 17 00:00:00 2001 17.5 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com> 17.6 +Date: Mon, 25 Oct 2010 17:14:47 +0200 17.7 +Subject: [PATCH] Make `make check' sanity testing verbose 17.8 + 17.9 +--- 17.10 + src/Makefile.am | 4 ++-- 17.11 + 1 files changed, 2 insertions(+), 2 deletions(-) 17.12 + 17.13 +diff --git a/src/Makefile.am b/src/Makefile.am 17.14 +index 63e6b18..1adc157 100644 17.15 +--- a/src/Makefile.am 17.16 ++++ b/src/Makefile.am 17.17 +@@ -125,11 +125,11 @@ check-local: localcheck remotecheck 17.18 + 17.19 + .PHONY: localcheck 17.20 + localcheck: 17.21 +- $(SHELL) $(srcdir)/sanity.sh `pwd`/cvs$(EXEEXT) 17.22 ++ $(SHELL) $(srcdir)/sanity.sh -v `pwd`/cvs$(EXEEXT) 17.23 + 17.24 + .PHONY: remotecheck 17.25 + remotecheck: all 17.26 +- $(SHELL) $(srcdir)/sanity.sh -r `pwd`/cvs$(EXEEXT) 17.27 ++ $(SHELL) $(srcdir)/sanity.sh -v -r `pwd`/cvs$(EXEEXT) 17.28 + 17.29 + ## MAINTAINER Targets 17.30 + 17.31 +-- 17.32 +1.7.2.3 17.33 +
18.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 18.2 +++ b/cvs/stuff/patches/cvs-1.11.23-remove_undefined_date_from_cvs_1_header.patch Sat Apr 14 14:19:43 2018 +0300 18.3 @@ -0,0 +1,25 @@ 18.4 +From 51ac6e634d6a53f4f2c78eafae599079c628e28e Mon Sep 17 00:00:00 2001 18.5 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com> 18.6 +Date: Mon, 25 Oct 2010 16:21:54 +0200 18.7 +Subject: [PATCH] Remove undefinded date from cvs(1) header 18.8 + 18.9 +--- 18.10 + doc/cvs.1 | 2 +- 18.11 + 1 files changed, 1 insertions(+), 1 deletions(-) 18.12 + 18.13 +diff --git a/doc/cvs.1 b/doc/cvs.1 18.14 +index b696d9a..07b7923 100644 18.15 +--- a/doc/cvs.1 18.16 ++++ b/doc/cvs.1 18.17 +@@ -23,7 +23,7 @@ 18.18 + .ds Rv \\$3 18.19 + .ds Dt \\$4 18.20 + .. 18.21 +-.TH CVS 1 "\*(Dt" 18.22 ++.TH CVS 1 18.23 + .\" Full space in nroff; half space in troff 18.24 + .de SP 18.25 + .if n .sp 18.26 +-- 18.27 +1.7.2.3 18.28 +
19.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 19.2 +++ b/cvs/stuff/patches/cvs-1.11.23-sanity.patch Sat Apr 14 14:19:43 2018 +0300 19.3 @@ -0,0 +1,39 @@ 19.4 +diff -up cvs-1.11.23/src/sanity.sh.old cvs-1.11.23/src/sanity.sh 19.5 +--- cvs-1.11.23/src/sanity.sh.old 2008-05-07 03:16:00.000000000 +0200 19.6 ++++ cvs-1.11.23/src/sanity.sh 2010-04-08 14:35:40.574373789 +0200 19.7 +@@ -2752,7 +2752,7 @@ ${PROG} \[admin aborted\]: attempt to de 19.8 + dotest_fail basicb-21 "${testcvs} -q admin -H" \ 19.9 + "admin: illegal option -- H 19.10 + ${PROG} \[admin aborted\]: specify ${PROG} -H admin for usage information" \ 19.11 +-"admin: invalid option -- H 19.12 ++"admin: invalid option -- 'H' 19.13 + ${PROG} \[admin aborted\]: specify ${PROG} -H admin for usage information" 19.14 + cd .. 19.15 + rmdir 1 19.16 +@@ -22192,7 +22198,7 @@ done" 19.17 + "-r--r--r-- .*" 19.18 + else 19.19 + dotest modes-5 "ls -l ${CVSROOT_DIRNAME}/first-dir/aa,v" \ 19.20 +-"-r--r--r-- .*" 19.21 ++"-r--r--r--.*" 19.22 + fi 19.23 + 19.24 + # Test for whether we can set the execute bit. 19.25 +@@ -22213,7 +22219,7 @@ done" 19.26 + "-r--r--r-- .*" 19.27 + else 19.28 + dotest modes-7 "ls -l ${CVSROOT_DIRNAME}/first-dir/aa,v" \ 19.29 +-"-r--r--r-- .*" 19.30 ++"-r--r--r--.*" 19.31 + fi 19.32 + 19.33 + # OK, now manually change the modes and see what happens. 19.34 +@@ -22236,7 +22242,7 @@ done" 19.35 + "-r--r----- .*" 19.36 + else 19.37 + dotest modes-7b "ls -l ${CVSROOT_DIRNAME}/first-dir/aa,v" \ 19.38 +-"-r--r----- .*" 19.39 ++"-r--r-----.*" 19.40 + fi 19.41 + 19.42 + CVSUMASK=007
20.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 20.2 +++ b/cvs/stuff/patches/series Sat Apr 14 14:19:43 2018 +0300 20.3 @@ -0,0 +1,20 @@ 20.4 +# from https://www.archlinux.org/packages/extra/x86_64/cvs/ 20.5 +cvs-1.11.19-extzlib.patch 20.6 +cvs-1.11.23-getline64.patch 20.7 + # CVE-2010-3864, https://www.redhat.com/security/data/cve/CVE-2010-3846.html 20.8 +cvs-1.11.23-cve-2010-3846.patch 20.9 +cvs-1.11.19-abortabort.patch 20.10 +cvs-1.11.19-comp.patch 20.11 +cvs-1.11.19-netbsd-tag.patch 20.12 +cvs-1.11.19-tagname.patch 20.13 +cvs-1.11.19-tmp.patch 20.14 +cvs-1.11.21-diff-kk.patch 20.15 +cvs-1.11.21-diff.patch 20.16 +cvs-1.11.21-sort.patch 20.17 +cvs-1.11.23-cvspass.patch 20.18 +cvs-1.11.19-logmsg.patch 20.19 +cvs-1.11.23-doc-Add-mandatory-argument-to-sp.patch 20.20 +cvs-1.11.23-make_make_check_sanity_testing_verbose.patch 20.21 +cvs-1.11.23-Pass-compilation-with-Wformat-security.patch 20.22 +cvs-1.11.23-remove_undefined_date_from_cvs_1_header.patch 20.23 +cvs-1.11.23-sanity.patch