You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Philip Martin <ph...@wandisco.com> on 2010/04/29 11:36:44 UTC

valgrind warning committing binary files

This came up while investigating a corrupt repository. I don't know if
the warning is connected to the corruption, or even if it is serious.
I'm using Subversion 1.6.x and apr/aprutil 1.2.12, all built with pool
debugging, but this happens with Subversion trunk as well.

The warning can be triggered in various ways (I first saw it while
running Apache under valgrind) but the simplest way is to import
theta.bin over ra_local.

$ svnadmin create repo
$ valgrind -q --num-callers=20 subversion/svn/.libs/lt-svn import -mm subversion/tests/cmdline/theta.bin file://`pwd`/repo/f1
==15201== Syscall param write(buf) points to uninitialised byte(s)
==15201==    at 0x641175B: (within /usr/lib/debug/libpthread-2.7.so)
==15201==    by 0x5DA5254: apr_file_flush_locked (readwrite.c:317)
==15201==    by 0x5DA5960: setptr (seek.c:25)
==15201==    by 0x5DA5B39: apr_file_seek (seek.c:70)
==15201==    by 0x592BCAC: svn_io_file_seek (io.c:2755)
==15201==    by 0x93F955F: get_file_offset (fs_fs.c:860)
==15201==    by 0x94030E8: rep_write_contents_close (fs_fs.c:5012)
==15201==    by 0x593DC9C: svn_stream_close (stream.c:116)
==15201==    by 0x940FF0C: window_consumer (tree.c:2402)
==15201==    by 0x54F4569: svn_txdelta_send_txstream (text_delta.c:838)
==15201==    by 0x54F44BD: svn_txdelta_send_stream (text_delta.c:806)
==15201==    by 0x4E38CD3: send_file_contents (commit.c:160)
==15201==    by 0x4E3900E: import_file (commit.c:253)
==15201==    by 0x4E399CD: import (commit.c:562)
==15201==    by 0x4E3A33D: svn_client_import3 (commit.c:789)
==15201==    by 0x40B5A2: svn_cl__import (import-cmd.c:114)
==15201==    by 0x411B37: main (main.c:2119)
==15201==  Address 0xa8c53ac is 76 bytes inside a block of size 4,096 alloc'd
==15201==    at 0x4C2260E: malloc (vg_replace_malloc.c:207)
==15201==    by 0x5DAB19C: pool_alloc (apr_pools.c:1324)
==15201==    by 0x5DAB30B: apr_palloc_debug (apr_pools.c:1364)
==15201==    by 0x5DA7A0E: apr_file_open (open.c:168)
==15201==    by 0x5926FB7: file_open (io.c:247)
==15201==    by 0x592B9C8: svn_io_file_open (io.c:2657)
==15201==    by 0x93F92BA: get_writable_proto_rev_body (fs_fs.c:780)
==15201==    by 0x93F8B17: with_txnlist_lock (fs_fs.c:502)
==15201==    by 0x93F94CA: get_writable_proto_rev (fs_fs.c:828)
==15201==    by 0x9402DE8: rep_write_get_baton (fs_fs.c:4946)
==15201==    by 0x9403494: set_representation (fs_fs.c:5083)
==15201==    by 0x9403568: svn_fs_fs__set_contents (fs_fs.c:5102)
==15201==    by 0x93F6C47: svn_fs_fs__dag_get_edit_stream (dag.c:997)
==15201==    by 0x941019F: apply_textdelta (tree.c:2461)
==15201==    by 0x941038C: fs_apply_textdelta (tree.c:2516)
==15201==    by 0x71DD57B: svn_fs_apply_textdelta (fs-loader.c:1080)
==15201==    by 0x6FAE6BC: apply_textdelta (commit.c:412)
==15201==    by 0x4E38AE6: send_file_contents (commit.c:109)
==15201==    by 0x4E3900E: import_file (commit.c:253)
==15201==    by 0x4E399CD: import (commit.c:562)

It seems to happen for some binary files, but not all, and I haven't
managed to trigger it for a text file.  The file does not need a
binary mime type:

$ svnadmin create repo
$ svn co file://`pwd`/repo wc
$ touch wc/foo
$ svn add wc/foo                                 # it's a text file
$ cp subversion/tests/cmdline/theta.bin wc/foo
$ svn ci -mm wc                                  # triggers the warning

The warning looks serious but I've not yet managed to corrupt a
repository, so I can't rule out a valgrind false alarm.

Can anyone else reproduce this?

-- 
Philip

Re: valgrind warning committing binary files

Posted by Philip Martin <ph...@wandisco.com>.
Julian Foad <ju...@wandisco.com> writes:

> Philip Martin wrote:
>> $ svnadmin create repo
>> $ valgrind -q --num-callers=20 subversion/svn/.libs/lt-svn import -mm subversion/tests/cmdline/theta.bin file://`pwd`/repo/f1
>> ==15201== Syscall param write(buf) points to uninitialised byte(s)
>
> Yup, similar result here running a recent trunk build.

I think this is a false alarm.  It occurs when writing zlib compressed
svndiff data and I'm using zlib 1.2.3.3.  I know this version of zlib
gives valgrind warnings during compression, and I think that the way
the zlib algorithm works means that it doesn't affect the result of a
compression-decompression round trip.

-- 
Philip

Re: valgrind warning committing binary files

Posted by Julian Foad <ju...@wandisco.com>.
Philip Martin wrote:
> $ svnadmin create repo
> $ valgrind -q --num-callers=20 subversion/svn/.libs/lt-svn import -mm subversion/tests/cmdline/theta.bin file://`pwd`/repo/f1
> ==15201== Syscall param write(buf) points to uninitialised byte(s)

Yup, similar result here running a recent trunk build.

(First I had to move 'theta.bin' to a directory that's not under version
control, otherwise it errored with "Repository UUID 'XXX' doesn't match
expected UUID 'YYY'.")

- Julian


> ==15201==    at 0x641175B: (within /usr/lib/debug/libpthread-2.7.so)
> ==15201==    by 0x5DA5254: apr_file_flush_locked (readwrite.c:317)
> ==15201==    by 0x5DA5960: setptr (seek.c:25)
> ==15201==    by 0x5DA5B39: apr_file_seek (seek.c:70)
> ==15201==    by 0x592BCAC: svn_io_file_seek (io.c:2755)
> ==15201==    by 0x93F955F: get_file_offset (fs_fs.c:860)
> ==15201==    by 0x94030E8: rep_write_contents_close (fs_fs.c:5012)
> ==15201==    by 0x593DC9C: svn_stream_close (stream.c:116)
> ==15201==    by 0x940FF0C: window_consumer (tree.c:2402)
> ==15201==    by 0x54F4569: svn_txdelta_send_txstream (text_delta.c:838)
> ==15201==    by 0x54F44BD: svn_txdelta_send_stream (text_delta.c:806)
> ==15201==    by 0x4E38CD3: send_file_contents (commit.c:160)
> ==15201==    by 0x4E3900E: import_file (commit.c:253)
> ==15201==    by 0x4E399CD: import (commit.c:562)
> ==15201==    by 0x4E3A33D: svn_client_import3 (commit.c:789)
> ==15201==    by 0x40B5A2: svn_cl__import (import-cmd.c:114)
> ==15201==    by 0x411B37: main (main.c:2119)
> ==15201==  Address 0xa8c53ac is 76 bytes inside a block of size 4,096 alloc'd
> ==15201==    at 0x4C2260E: malloc (vg_replace_malloc.c:207)
> ==15201==    by 0x5DAB19C: pool_alloc (apr_pools.c:1324)
> ==15201==    by 0x5DAB30B: apr_palloc_debug (apr_pools.c:1364)
> ==15201==    by 0x5DA7A0E: apr_file_open (open.c:168)
> ==15201==    by 0x5926FB7: file_open (io.c:247)
> ==15201==    by 0x592B9C8: svn_io_file_open (io.c:2657)
> ==15201==    by 0x93F92BA: get_writable_proto_rev_body (fs_fs.c:780)
> ==15201==    by 0x93F8B17: with_txnlist_lock (fs_fs.c:502)
> ==15201==    by 0x93F94CA: get_writable_proto_rev (fs_fs.c:828)
> ==15201==    by 0x9402DE8: rep_write_get_baton (fs_fs.c:4946)
> ==15201==    by 0x9403494: set_representation (fs_fs.c:5083)
> ==15201==    by 0x9403568: svn_fs_fs__set_contents (fs_fs.c:5102)
> ==15201==    by 0x93F6C47: svn_fs_fs__dag_get_edit_stream (dag.c:997)
> ==15201==    by 0x941019F: apply_textdelta (tree.c:2461)
> ==15201==    by 0x941038C: fs_apply_textdelta (tree.c:2516)
> ==15201==    by 0x71DD57B: svn_fs_apply_textdelta (fs-loader.c:1080)
> ==15201==    by 0x6FAE6BC: apply_textdelta (commit.c:412)
> ==15201==    by 0x4E38AE6: send_file_contents (commit.c:109)
> ==15201==    by 0x4E3900E: import_file (commit.c:253)
> ==15201==    by 0x4E399CD: import (commit.c:562)
> 
> It seems to happen for some binary files, but not all, and I haven't
> managed to trigger it for a text file.  The file does not need a
> binary mime type:
> 
> $ svnadmin create repo
> $ svn co file://`pwd`/repo wc
> $ touch wc/foo
> $ svn add wc/foo                                 # it's a text file
> $ cp subversion/tests/cmdline/theta.bin wc/foo
> $ svn ci -mm wc                                  # triggers the warning
> 
> The warning looks serious but I've not yet managed to corrupt a
> repository, so I can't rule out a valgrind false alarm.
> 
> Can anyone else reproduce this?
>