Author: ivan
Date: Sat Jan 9 17:42:38 2016
New Revision: 1723865
URL: http://svn.apache.org/viewvc?rev=1723865&view=rev
Log:
Fix bug when svn_ra_get_dir2() will fail if invoked with SVN_DIRENT_SIZE, but
without SVN_DIRENT_KIND. There is no user visible bug, since Subversion
command line client always ask for SVN_DIRENT_KIND.
* subversion/libsvn_ra_local/ra_plugin.c
(svn_ra_local__get_dir): Do not access possibly uninitialized local variable.
* subversion/svnserve/serve.c
(get_dir): Do not access possibly uninitialized local variable.
* subversion/tests/libsvn_ra/ra-test.c
(get_dir_test): Extend test to test svn_ra_get_dir2(SVN_DIRENT_SIZE).
Modified:
subversion/trunk/subversion/libsvn_ra_local/ra_plugin.c
subversion/trunk/subversion/svnserve/serve.c
subversion/trunk/subversion/tests/libsvn_ra/ra-test.c
Modified: subversion/trunk/subversion/libsvn_ra_local/ra_plugin.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_local/ra_plugin.c?rev=1723865&r1=1723864&r2=1723865&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_local/ra_plugin.c (original)
+++ subversion/trunk/subversion/libsvn_ra_local/ra_plugin.c Sat Jan 9 17:42:38
2016
@@ -1362,7 +1362,7 @@ svn_ra_local__get_dir(svn_ra_session_t *
if (dirent_fields & SVN_DIRENT_SIZE)
{
/* size */
- if (entry->kind == svn_node_dir)
+ if (fs_entry->kind == svn_node_dir)
entry->size = 0;
else
SVN_ERR(svn_fs_file_length(&(entry->size), root,
Modified: subversion/trunk/subversion/svnserve/serve.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/svnserve/serve.c?rev=1723865&r1=1723864&r2=1723865&view=diff
==============================================================================
--- subversion/trunk/subversion/svnserve/serve.c (original)
+++ subversion/trunk/subversion/svnserve/serve.c Sat Jan 9 17:42:38 2016
@@ -1828,7 +1828,7 @@ get_dir(svn_ra_svn_conn_t *conn,
entry_kind = fsent->kind;
if (dirent_fields & SVN_DIRENT_SIZE)
- if (entry_kind != svn_node_dir)
+ if (fsent->kind != svn_node_dir)
SVN_CMD_ERR(svn_fs_file_length(&entry_size, root, file_path,
subpool));
Modified: subversion/trunk/subversion/tests/libsvn_ra/ra-test.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_ra/ra-test.c?rev=1723865&r1=1723864&r2=1723865&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_ra/ra-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_ra/ra-test.c Sat Jan 9 17:42:38
2016
@@ -603,6 +603,7 @@ get_dir_test(const svn_test_opts_t *opts
{
svn_ra_session_t *session;
apr_hash_t *dirents;
+ svn_dirent_t *ent;
SVN_ERR(make_and_open_repos(&session, "test-get-dir", opts, pool));
SVN_ERR(commit_tree(session, pool));
@@ -613,6 +614,14 @@ get_dir_test(const svn_test_opts_t *opts
SVN_DIRENT_KIND, pool),
SVN_ERR_FS_NOT_FOUND);
+ /* Test fetching SVN_DIRENT_SIZE without SVN_DIRENT_KIND. */
+ SVN_ERR(svn_ra_get_dir2(session, &dirents, NULL, NULL, "", 1,
+ SVN_DIRENT_SIZE, pool));
+ SVN_TEST_INT_ASSERT(apr_hash_count(dirents), 1);
+ ent = svn_hash_gets(dirents, "A");
+ SVN_TEST_ASSERT(ent);
+ SVN_TEST_INT_ASSERT(ent->size, 0);
+
return SVN_NO_ERROR;
}