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;
 }
 


Reply via email to