[cvsnt] cvs commit crashes with binary files

Tony Hoyle tony.hoyle at march-hare.com
Sun May 21 19:02:20 BST 2006


Michael Wojcik wrote:
> There is probably a bug in the CVSNT server, possibly a duplicate free,
> in some circumstances, which is triggering the automatic heap validation
> code in newer versions of glibc.  (It's also possible that this is a bug
> in some library that CVSNT calls, or in glibc itself, though that's less
> likely.)

It's unlikely to be a duplicate free since the code is written to prevent that 
- all pointers automatically get nulled at the end of the free... I don't 
leave pointers hanging around.

Here is a segment of a run through passed valgrind - which is *much* more 
strict than anything in gcc - showing no evidence of the bug.  In fact if 
finds a number of errors in libc (which is a free bug, but not at all cvsnt 
related - IIRC libc has always had these issues).

The Windows version also does a lot of checking which would find any similar 
problems.

I suspect then a bug in a related library, gcc or glibc itself.

Tony

---

-18:55:59--  http://www.google.ca/images/dot.gif
            => `dot.gif'
Resolving www.google.ca... 66.249.93.104, 66.249.93.99
Connecting to www.google.ca[66.249.93.104]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 46 [image/gif]

     0K                                                       100%  449.22 KB/s

18:56:02 (449.22 KB/s) - `dot.gif' saved [46/46]

cvsnt add: scheduling file `dot.gif' for addition
cvsnt add: use 'cvsnt commit' to add this file permanently
==13728== Invalid read of size 4
==13728==    at 0x1BAED16C: (within /lib/tls/libc-2.3.2.so)
==13728==    by 0x1BAED58C: (within /lib/tls/libc-2.3.2.so)
==13728==    by 0x1BAED0B5: (within /lib/tls/libc-2.3.2.so)
==13728==    by 0x1BAFA6EC: (within /lib/tls/libc-2.3.2.so)
==13728==    by 0x1BAFB1F3: (within /lib/tls/libc-2.3.2.so)
==13728==    by 0x1BBE357C: (within /lib/tls/libc-2.3.2.so)
==13728==    by 0x1BBE36C4: __libc_freeres (in /lib/tls/libc-2.3.2.so)
==13728==    by 0x1B8FEA08: _vgw(float, long double,...)(...)(long 
double,...)(short) (vg_intercept.c:55)
==13728==    by 0x1BB011C5: exit (in /lib/tls/libc-2.3.2.so)
==13728==    by 0x1BAEB97D: __libc_start_main (in /lib/tls/libc-2.3.2.so)
==13728==    by 0x804E7D0: ??? (start.S:102)
==13728==  Address 0x1BC9F444 is 68 bytes inside a block of size 120 free'd
==13728==    at 0x1B904B04: free (vg_replace_malloc.c:152)
==13728==    by 0x1BAEDD37: (within /lib/tls/libc-2.3.2.so)
==13728==    by 0x1BBAC778: tdestroy (in /lib/tls/libc-2.3.2.so)
==13728==    by 0x1BBE31C1: (within /lib/tls/libc-2.3.2.so)
==13728==    by 0x1BBE36C4: __libc_freeres (in /lib/tls/libc-2.3.2.so)
==13728==    by 0x1B8FEA08: _vgw(float, long double,...)(...)(long 
double,...)(short) (vg_intercept.c:55)
==13728==    by 0x1BB011C5: exit (in /lib/tls/libc-2.3.2.so)
==13728==    by 0x1BAEB97D: __libc_start_main (in /lib/tls/libc-2.3.2.so)
==13728==    by 0x804E7D0: ??? (start.S:102)

(this repeats for each cvs command).



More information about the cvsnt mailing list