Author: rhuijben
Date: Tue Mar 17 13:30:24 2015
New Revision: 1667301

URL: http://svn.apache.org/r1667301
Log:
Following up on r1667233, report errors from svnserve's get_location_segments
function in a way that the caller doesn't get a protocol error. Change the
error values to match what get_location_segments would return.

* subversion/svnserve/serve.c
  (get_location_segments): Write done before writing the error.

Modified:
    subversion/trunk/subversion/svnserve/serve.c

Modified: subversion/trunk/subversion/svnserve/serve.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/svnserve/serve.c?rev=1667301&r1=1667300&r2=1667301&view=diff
==============================================================================
--- subversion/trunk/subversion/svnserve/serve.c (original)
+++ subversion/trunk/subversion/svnserve/serve.c Tue Mar 17 13:30:24 2015
@@ -2517,7 +2517,16 @@ static svn_error_t *get_location_segment
     {
       svn_revnum_t youngest;
 
-      SVN_CMD_ERR(svn_fs_youngest_rev(&youngest, b->repository->fs, pool));
+      err = svn_fs_youngest_rev(&youngest, b->repository->fs, pool);
+
+      if (err)
+        {
+          err = svn_error_compose_create(
+                    svn_ra_svn__write_word(conn, pool, "done"),
+                    err);
+
+          return log_fail_and_flush(err, b, conn, pool);
+        }
 
       if (!SVN_IS_VALID_REVNUM(start_rev))
         start_rev = youngest;
@@ -2531,7 +2540,8 @@ static svn_error_t *get_location_segment
 
   if (end_rev > start_rev)
     {
-      err = svn_error_createf(SVN_ERR_INCORRECT_PARAMS, NULL,
+      err = svn_ra_svn__write_word(conn, pool, "done");
+      err = svn_error_createf(SVN_ERR_FS_NO_SUCH_REVISION, err,
                               "Get-location-segments end revision must not be "
                               "younger than start revision");
       return log_fail_and_flush(err, b, conn, pool);
@@ -2539,7 +2549,8 @@ static svn_error_t *get_location_segment
 
   if (start_rev > peg_revision)
     {
-      err = svn_error_createf(SVN_ERR_INCORRECT_PARAMS, NULL,
+      err = svn_ra_svn__write_word(conn, pool, "done");
+      err = svn_error_createf(SVN_ERR_FS_NO_SUCH_REVISION, err,
                               "Get-location-segments start revision must not "
                               "be younger than peg revision");
       return log_fail_and_flush(err, b, conn, pool);
@@ -2559,8 +2570,7 @@ static svn_error_t *get_location_segment
   write_err = svn_ra_svn__write_word(conn, pool, "done");
   if (write_err)
     {
-      svn_error_clear(err);
-      return write_err;
+      return svn_error_compose_create(write_err, err);
     }
   SVN_CMD_ERR(err);
 


Reply via email to