You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ph...@apache.org on 2010/05/28 14:20:04 UTC

svn commit: r949158 - in /subversion/trunk/subversion: mod_dav_svn/deadprops.c tests/cmdline/prop_tests.py

Author: philip
Date: Fri May 28 12:20:04 2010
New Revision: 949158

URL: http://svn.apache.org/viewvc?rev=949158&view=rev
Log:
Fix issue 3553: revprop change hook errors are not XML safe.

* subversion/mod_dav_svn/deadprops.c
  (save_value): Quote hook error.

* subversion/tests/cmdline/prop_tests.py
  (post_revprop_change_hook): Use regex for error matching, verify change.
  (test_list): Remove XFail from post_revprop_change_hook.

Modified:
    subversion/trunk/subversion/mod_dav_svn/deadprops.c
    subversion/trunk/subversion/tests/cmdline/prop_tests.py

Modified: subversion/trunk/subversion/mod_dav_svn/deadprops.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/mod_dav_svn/deadprops.c?rev=949158&r1=949157&r2=949158&view=diff
==============================================================================
--- subversion/trunk/subversion/mod_dav_svn/deadprops.c (original)
+++ subversion/trunk/subversion/mod_dav_svn/deadprops.c Fri May 28 12:20:04 2010
@@ -218,6 +218,11 @@ save_value(dav_db *db, const dav_prop_na
                                                db->authz_read_baton,
                                                resource->pool);
 
+          /* Prepare any hook failure message to get sent over the wire */
+          serr = svn_error_purge_tracing(serr);
+          if (serr && serr->apr_err == SVN_ERR_REPOS_HOOK_FAILURE)
+            serr->message = apr_xml_quote_string(serr->pool, serr->message, 1);
+
           /* mod_dav doesn't handle the returned error very well, it
              generates its own generic error that will be returned to
              the client.  Cache the detailed error here so that it can

Modified: subversion/trunk/subversion/tests/cmdline/prop_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/prop_tests.py?rev=949158&r1=949157&r2=949158&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/prop_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/prop_tests.py Fri May 28 12:20:04 2010
@@ -1707,8 +1707,9 @@ def post_revprop_change_hook(sbox):
   svntest.actions.create_failing_hook(repo_dir, 'post-revprop-change',
                                       error_msg)
 
-  expected_error = svntest.verify.ExpectedOutput([
-    "svn: " + svntest.actions.hook_failure_message('post-revprop-change'),
+  # serf/neon/mod_dav_svn splits the "svn: hook failed" line
+  expected_error = svntest.verify.RegexOutput([
+    '(svn: |)post-revprop-change hook failed',
     error_msg + "\n",
   ], match_all = False)
 
@@ -1716,6 +1717,12 @@ def post_revprop_change_hook(sbox):
                                      'ps', '--revprop', '-r0', 'p', 'v',
                                      wc_dir)
 
+  # Verify change has stuck -- at one time mod_dav_svn would rollback
+  # revprop changes on post-revprop-change hook errors
+  svntest.actions.run_and_verify_svn(None, 'v', [],
+                                     'pg', '--revprop', '-r0', 'p',
+                                     wc_dir)
+
 def rm_of_replaced_file(sbox):
   """properties after a removal of a replaced file"""
 
@@ -1933,7 +1940,7 @@ test_list = [ None,
               same_replacement_props,
               added_moved_file,
               delete_nonexistent_property,
-              XFail(post_revprop_change_hook, svntest.main.is_ra_type_dav),
+              post_revprop_change_hook,
               rm_of_replaced_file,
               prop_reject_grind,
               obstructed_subdirs,