Author: cmpilato
Date: Tue May 10 18:21:22 2011
New Revision: 1101580

URL: http://svn.apache.org/viewvc?rev=1101580&view=rev
Log:
Fix a bug caused by using an uninitialized variable.

* subversion/libsvn_ra_serf/property.c
  (retrieve_baseline_info): Add docstring, and allow 'actual_revision'
    to be NULL to indicate caller apathy.  While here, make some
    non-overlapping formatting corrections.

* subversion/libsvn_ra_serf/property.c
  (svn_ra_serf__get_baseline_info): Rework the VCC-hunt fallback
    scenario to ensure that we don't set *latest_revnum to an
    uninitialized value.

Modified:
    subversion/trunk/subversion/libsvn_ra_serf/property.c

Modified: subversion/trunk/subversion/libsvn_ra_serf/property.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/property.c?rev=1101580&r1=1101579&r2=1101580&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_serf/property.c (original)
+++ subversion/trunk/subversion/libsvn_ra_serf/property.c Tue May 10 18:21:22 
2011
@@ -894,6 +894,17 @@ svn_ra_serf__set_bare_props(void *baton,
                         ns, ns_len, name, name_len, val, pool);
 }
 
+
+/*
+ * Contact the server (using SESSION and CONN) to calculate baseline
+ * information for BASELINE_URL at REVISION (which may be
+ * SVN_INVALID_REVNUM to query the HEAD revision).
+ *
+ * If ACTUAL_REVISION is non-NULL, set *ACTUAL_REVISION to revision
+ * retrieved from the server as part of this process (which should
+ * match REVISION when REVISION is valid).  Set *BASECOLL_URL_P to the
+ * baseline collection URL.
+ */
 static svn_error_t *
 retrieve_baseline_info(svn_revnum_t *actual_revision,
                        const char **basecoll_url_p,
@@ -901,7 +912,7 @@ retrieve_baseline_info(svn_revnum_t *act
                        svn_ra_serf__connection_t *conn,
                        const char *baseline_url,
                        svn_revnum_t revision,                       
-                       apr_pool_t  *pool)
+                       apr_pool_t *pool)
 {
   apr_hash_t *props = apr_hash_make(pool);
   const char *basecoll_url;
@@ -911,9 +922,8 @@ retrieve_baseline_info(svn_revnum_t *act
                                       baseline_url, revision, "0",
                                       baseline_props, pool));
 
-  basecoll_url  = svn_ra_serf__get_ver_prop(props, baseline_url, revision,
-                                            "DAV:",
-                                            "baseline-collection");
+  basecoll_url = svn_ra_serf__get_ver_prop(props, baseline_url, revision,
+                                           "DAV:", "baseline-collection");
 
   if (!basecoll_url)
     {
@@ -925,15 +935,18 @@ retrieve_baseline_info(svn_revnum_t *act
   *basecoll_url_p = svn_urlpath__canonicalize(basecoll_url, pool);
 
   version_name = svn_ra_serf__get_ver_prop(props, baseline_url, revision,
-                                       "DAV:", SVN_DAV__VERSION_NAME);
+                                           "DAV:", SVN_DAV__VERSION_NAME);
   if (!version_name)
     {
       return svn_error_create(SVN_ERR_RA_DAV_PROPS_NOT_FOUND, NULL,
                               _("The PROPFIND response did not include "
-                              "the requested version-name value"));
+                                "the requested version-name value"));
     }
 
-  *actual_revision = SVN_STR_TO_REV(version_name);
+  if (actual_revision)
+    {
+      *actual_revision = SVN_STR_TO_REV(version_name);
+    }
   
   return SVN_NO_ERROR;
 }
@@ -996,8 +1009,6 @@ svn_ra_serf__get_baseline_info(const cha
   /* Otherwise, we fall back to the old VCC_URL PROPFIND hunt.  */
   else
     {
-      svn_revnum_t actual_revision;
-
       SVN_ERR(svn_ra_serf__discover_vcc(&vcc_url, session, conn, pool));
 
       if (revision != SVN_INVALID_REVNUM)
@@ -1009,17 +1020,21 @@ svn_ra_serf__get_baseline_info(const cha
 
           if (!basecoll_url)
             {
-              SVN_ERR(retrieve_baseline_info(&actual_revision, &basecoll_url,
-                                             session, conn,
-                                             vcc_url, revision,
-                                             pool));
-              SVN_ERR(svn_ra_serf__blncache_set(session->blncache,
-                                                NULL, revision, basecoll_url,
-                                                pool));
+              SVN_ERR(retrieve_baseline_info(NULL, &basecoll_url, session,
+                                             conn, vcc_url, revision, pool));
+              SVN_ERR(svn_ra_serf__blncache_set(session->blncache, NULL,
+                                                revision, basecoll_url, pool));
+            }
+
+          if (latest_revnum)
+            {
+              *latest_revnum = revision;
             }
         }
       else
         {
+          svn_revnum_t actual_revision;
+
           SVN_ERR(svn_ra_serf__retrieve_props(props, session, conn,
                                               vcc_url, revision, "0",
                                               checked_in_props, pool));
@@ -1045,16 +1060,15 @@ svn_ra_serf__get_baseline_info(const cha
               SVN_ERR(retrieve_baseline_info(&actual_revision, &basecoll_url,
                                              session, conn,
                                              baseline_url, revision, pool));
-
               SVN_ERR(svn_ra_serf__blncache_set(session->blncache,
                                                 baseline_url, actual_revision,
                                                 basecoll_url, pool));
             }
-        }
 
-      if (latest_revnum)
-        {
-          *latest_revnum = actual_revision;
+          if (latest_revnum)
+            {
+              *latest_revnum = actual_revision;
+            }
         }
     }
 


Reply via email to