[Needs a sanity.sh test case. -kingdon] To: bug-cvs@gnu.org Subject: assertion failure in function lock_name From: KOIE Hidetaka (=?iso-2022-jp?B?GyRCOHE5PjFRTjQbKEI=?=) Date: Sun, 7 Mar 1999 22:20:20 +0900 >Submitter-Id: net >Originator: KOIE Hidetaka >Organization: net >Confidential: yes >Synopsis: assertion failure in function lock_name >Severity: serious >Priority: high >Category: cvs >Class: sw-bug >Release: cvs-1.10.5.1 >Environment: System: FreeBSD skipjack 2.2.8-STABLE FreeBSD 2.2.8-STABLE #2: Wed Mar 3 00:50:51 JST 1999 koie@skipjack:/.a/ufs/wd3s2a/pao/sys228/compile/TP i386 >Description: If set TopLevelAdmin=yes and LockDir=yes, the function `lock_name' detect assertion failure. >How-To-Repeat: (step 1) In file $CVSROOT/CVSROOT/config, specify two parameters. TopLevelAdmin=yes LockDir=/tmp (step 2) Create a working directory. % cvs co dir-1 cvs checkout: Updating dir-1 cvs checkout: Updating dir-1/dir-2 U dir-1/dir-2/file-3 (step 3) Update a working direcotry. % cvs up cvs update: Updating . assertion "*short_repos++ == '/'" failed: file "lock.c", line 179 Abort (core dumped) >Fix: The following is a patch for cvs-1.10.5.1. If parameter `repository' of lock_name is equal to CVSroot_directory, lock_name return with just `lock_dir'. ====================================================================== --- lock.c.org Sun Mar 7 19:33:12 1999 +++ lock.c Sun Mar 7 22:14:46 1999 @@ -152,11 +152,6 @@ lock_name (repository, name) char *name; { char *retval; - char *p; - char *q; - char *short_repos; - mode_t save_umask; - int saved_umask = 0; if (lock_dir == NULL) { @@ -167,6 +162,11 @@ lock_name (repository, name) } else { + char *p; + char *q; + char *short_repos; + mode_t save_umask; + int saved_umask = 0; struct stat sb; mode_t new_mode = 0; @@ -176,7 +176,11 @@ lock_name (repository, name) assert (strncmp (repository, CVSroot_directory, strlen (CVSroot_directory)) == 0); short_repos = repository + strlen (CVSroot_directory); - assert (*short_repos++ == '/'); + if (*short_repos != '\0') + { + assert (*short_repos == '/'); + short_repos++; + } retval = xmalloc (strlen (lock_dir) + strlen (short_repos) ====================================================================== -- KOIE Hidetaka / koie@suri.co.jp / SURIGIKEN Co.,LTD.