Philip Martin <philip.mar...@wandisco.com> writes:

> I'm not 100%
> sure whether we need second one as well as the first one: I suspect that
> the first alone is not enough, but so far I've failed to come up with a
> test case to prove that.

I can't get valgrind to trigger but if I extend the test case like this:

Index: subversion/tests/libsvn_fs/locks-test.c
===================================================================
--- subversion/tests/libsvn_fs/locks-test.c     (revision 1205918)
+++ subversion/tests/libsvn_fs/locks-test.c     (working copy)
@@ -358,6 +358,16 @@ get_locks(const svn_test_opts_t *opts,
                                        num_expected_paths, pool));
   }
 
+  {
+    static const char *expected_paths[] = { 0 };
+    num_expected_paths = 0;
+    get_locks_baton = make_get_locks_baton(pool);
+    SVN_ERR(svn_fs_get_locks(fs, "A/D/H/ABCDEFGHIJKLMNOPQR", 
get_locks_callback,
+                             get_locks_baton, pool));
+    SVN_ERR(verify_matching_lock_paths(get_locks_baton, expected_paths,
+                                       num_expected_paths, pool));
+  }
+
   return SVN_NO_ERROR;
 }

then I reach this bit of code:

261       while ((! db_err)
(gdb) n
262              && strncmp(lookup_path, key.data, strlen(lookup_path)) == 0)
(gdb) p lookup_path
$1 = 0x7470d0 "/A/D/H/ABCDEFGHIJKLMNOPQR/"
(gdb) p key
$2 = {data = 0x746bd0, size = 10, ulen = 0, dlen = 0, doff = 0, 
  app_data = 0x0, flags = 16}
(gdb) p (char*)key.data
$3 = 0x746bd0 "/A/D/H/chi\354\366\377\177"

and passing that key.data to strncmp, with n>key.size, looks like an
error.  So I believe the first fix alone is not enough.

-- 
uberSVN: Apache Subversion Made Easy
http://www.uberSVN.com

Reply via email to