Hi,
Here's a patch. +1 ?
-David
-----------------------
Fix issue #1584 : Prevent 'svn:' revision props from being set on files/dirs
* subversion/libsvn_client/prop_commands.c
(is_revision_prop_name) : New function.
(svn_client_propset) : Refuse to set revision properties (revision
properties are set in svn_client_revprop_set())
Index: subversion/include/svn_props.h
===================================================================
--- subversion/include/svn_props.h (revision 7781)
+++ subversion/include/svn_props.h (working copy)
@@ -276,6 +276,14 @@
*/
#define SVN_PROP_REVISION_ORIG_DATE SVN_PROP_PREFIX "original-date"
+/*
+ * This is a list of all revision properties.
+ */
+#define SVN_PROP_REVISION_ALL_PROPS SVN_PROP_REVISION_AUTHOR, \
+ SVN_PROP_REVISION_LOG, \
+ SVN_PROP_REVISION_DATE, \
+ SVN_PROP_REVISION_ORIG_DATE,
+
/** @} */
Index: subversion/libsvn_client/prop_commands.c
===================================================================
--- subversion/libsvn_client/prop_commands.c (revision 7781)
+++ subversion/libsvn_client/prop_commands.c (working copy)
@@ -57,6 +57,29 @@
}
+/* Check whether NAME is a revision property name.
+ *
+ * Return TRUE if it is.
+ * Return FALSE if it is not.
+ */
+static svn_boolean_t
+is_revision_prop_name (const char *name)
+{
+ int i;
+ const char *revision_props[] =
+ {
+ SVN_PROP_REVISION_ALL_PROPS
+ NULL,
+ };
+
+ for (i = 0; revision_props[i]; i++)
+ {
+ if (strcmp (name, revision_props[i]) == 0)
+ return TRUE;
+ }
+ return FALSE;
+}
+
/* A baton for propset_walk_cb. */
struct propset_walk_baton
{
@@ -113,6 +136,13 @@
svn_wc_adm_access_t *adm_access;
const svn_wc_entry_t *node;
+ if (is_revision_prop_name (propname))
+ {
+ return svn_error_createf (SVN_ERR_CLIENT_PROPERTY_NAME, NULL,
+ "Revision property '%s' not allowed "
+ "in this context", propname);
+ }
+
if (svn_path_is_url (target))
{
/* ### Note that this function will need to take an auth baton
Index: subversion/tests/clients/cmdline/prop_tests.py
===================================================================
--- subversion/tests/clients/cmdline/prop_tests.py (revision 7781)
+++ subversion/tests/clients/cmdline/prop_tests.py (working copy)
@@ -549,6 +549,26 @@
'svn:externals',
'foo http://host.com/repos', iota_path)
+ svntest.actions.run_and_verify_svn('Illegal target', None,
+ svntest.SVNAnyOutput, 'propset',
+ 'svn:author', 'socrates', iota_path)
+
+ svntest.actions.run_and_verify_svn('Illegal target', None,
+ svntest.SVNAnyOutput, 'propset',
+ 'svn:log', 'log message', iota_path)
+
+ svntest.actions.run_and_verify_svn('Illegal target', None,
+ svntest.SVNAnyOutput, 'propset',
+ 'svn:date',
+ 'Tue Jan 19 04:14:07 2038',
+ iota_path)
+
+ svntest.actions.run_and_verify_svn('Illegal target', None,
+ svntest.SVNAnyOutput, 'propset',
+ 'svn:original-date',
+ 'Thu Jan 1 01:00:00 1970',
+ iota_path)
+
# Status unchanged
svntest.actions.run_and_verify_status(wc_dir, expected_status)
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Tue Nov 18 20:14:10 2003