Author: stsp Date: Tue Aug 3 10:52:12 2010 New Revision: 981818 URL: http://svn.apache.org/viewvc?rev=981818&view=rev Log: * subversion/libsvn_client/export.c, subversion/svn/export-cmd.c: (svn_client_export5, svn_cl__export): If the export target is a URL, return an error. Fixes a user-triggerable assertion.
* subversion/tests/cmdline/input_validation_tests.py (invalid_export_targets, test_list): New test, checking whether svn export correctly handles invalid export targets (URLs and regular files). Modified: subversion/trunk/subversion/libsvn_client/export.c subversion/trunk/subversion/svn/export-cmd.c subversion/trunk/subversion/tests/cmdline/input_validation_tests.py Modified: subversion/trunk/subversion/libsvn_client/export.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/export.c?rev=981818&r1=981817&r2=981818&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_client/export.c (original) +++ subversion/trunk/subversion/libsvn_client/export.c Tue Aug 3 10:52:12 2010 @@ -942,6 +942,11 @@ svn_client_export5(svn_revnum_t *result_ SVN_ERR_ASSERT(peg_revision != NULL); SVN_ERR_ASSERT(revision != NULL); + if (svn_path_is_url(to)) + return svn_error_return(svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL, + _("'%s' is not a local path"), + to)); + peg_revision = svn_cl__rev_default_to_head_or_working(peg_revision, from); revision = svn_cl__rev_default_to_peg(revision, peg_revision); Modified: subversion/trunk/subversion/svn/export-cmd.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/export-cmd.c?rev=981818&r1=981817&r2=981818&view=diff ============================================================================== --- subversion/trunk/subversion/svn/export-cmd.c (original) +++ subversion/trunk/subversion/svn/export-cmd.c Tue Aug 3 10:52:12 2010 @@ -87,6 +87,11 @@ svn_cl__export(apr_getopt_t *os, SVN_ERR(svn_opt__split_arg_at_peg_revision(&to, NULL, to, pool)); } + if (svn_path_is_url(to)) + return svn_error_return(svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, + NULL, + _("'%s' is not a local path"), + to)); if (! opt_state->quiet) SVN_ERR(svn_cl__notifier_mark_export(ctx->notify_baton2)); Modified: subversion/trunk/subversion/tests/cmdline/input_validation_tests.py URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/input_validation_tests.py?rev=981818&r1=981817&r2=981818&view=diff ============================================================================== --- subversion/trunk/subversion/tests/cmdline/input_validation_tests.py (original) +++ subversion/trunk/subversion/tests/cmdline/input_validation_tests.py Tue Aug 3 10:52:12 2010 @@ -122,6 +122,15 @@ def invalid_diff_targets(sbox): "repository to repository", 'diff', '--summarize', "iota", "A") +def invalid_export_targets(sbox): + "invalid targets for 'export'" + sbox.build(read_only=True) + run_and_verify_svn_in_wc(sbox, "svn: Can't create directory 'iota': " + + "File exists", 'export', '.', 'iota') + for target in ["^/", "file://"]: + run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", + 'export', '.', target) + ######################################################################## # Run the tests @@ -135,6 +144,7 @@ test_list = [ None, invalid_copy_target, invalid_delete_targets, invalid_diff_targets, + invalid_export_targets, ] if __name__ == '__main__':