svn commit: r1921182 - in /subversion/branches/1.14.x: ./ subversion/include/private/ subversion/libsvn_subr/ subversion/svn/ subversion/svnadmin/ subversion/svnbench/ subversion/svndumpfilter/ subversion/svnfsfs/ subversion/svnlook/ subversion/svnmucc...

[email protected]
Newsgroups gmane.comp.version-control.subversion.svn
Message-ID <[email protected]>
Author: stsp
Date: Tue Oct  8 09:20:13 2024
New Revision: 1921182

URL: http://svn.apache.org/viewvc?rev=1921182&view=rev
Log:
Merge r1921181 to 1.14.x from trunk, fixing CVE-2024-45720.

 * CVE-2024-45720
   Votes:
     +1: kotkov, rinrab, jcorvel


Modified:
    subversion/branches/1.14.x/   (props changed)
    subversion/branches/1.14.x/CHANGES
    subversion/branches/1.14.x/build.conf
    subversion/branches/1.14.x/subversion/include/private/svn_cmdline_private.h
    subversion/branches/1.14.x/subversion/libsvn_subr/cmdline.c
    subversion/branches/1.14.x/subversion/svn/svn.c
    subversion/branches/1.14.x/subversion/svnadmin/svnadmin.c
    subversion/branches/1.14.x/subversion/svnbench/svnbench.c
    subversion/branches/1.14.x/subversion/svndumpfilter/svndumpfilter.c
    subversion/branches/1.14.x/subversion/svnfsfs/svnfsfs.c
    subversion/branches/1.14.x/subversion/svnlook/svnlook.c
    subversion/branches/1.14.x/subversion/svnmucc/svnmucc.c
    subversion/branches/1.14.x/subversion/svnrdump/svnrdump.c
    subversion/branches/1.14.x/subversion/svnserve/svnserve.c
    subversion/branches/1.14.x/subversion/svnsync/svnsync.c
    subversion/branches/1.14.x/subversion/svnversion/svnversion.c
    subversion/branches/1.14.x/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c
    subversion/branches/1.14.x/tools/client-side/svnconflict/svnconflict.c
    subversion/branches/1.14.x/tools/dev/svnraisetreeconflict/svnraisetreeconflict.c
    subversion/branches/1.14.x/tools/dev/wc-ng/svn-wc-db-tester.c
    subversion/branches/1.14.x/tools/server-side/svnauthz.c

Propchange: subversion/branches/1.14.x/
------------------------------------------------------------------------------
  Merged /subversion/trunk:r1921181

Modified: subversion/branches/1.14.x/CHANGES
URL: http://svn.apache.org/viewvc/subversion/branches/1.14.x/CHANGES?rev=1921182&r1=1921181&r2=1921182&view=diff
==============================================================================
--- subversion/branches/1.14.x/CHANGES (original)
+++ subversion/branches/1.14.x/CHANGES Tue Oct  8 09:20:13 2024
@@ -9,6 +9,7 @@ Version 1.14.4
 https://svn.apache.org/repos/asf/subversion/tags/1.14.4
  User-visible changes:
   - Client-side improvements and bugfixes:
+    * Fix CVE-2024-45720: command line argument injection on Windows
     * Fix unbounded memory usage in propget and proplist --xml (r1918138, -39)
     * Fix cmdline parsing bugs in --change (-c) argument (r1917864, -944)
     * Improve help message for svnmucc PUT (r1914222)

Modified: subversion/branches/1.14.x/build.conf
URL: http://svn.apache.org/viewvc/subversion/branches/1.14.x/build.conf?rev=1921182&r1=1921181&r2=1921182&view=diff
==============================================================================
--- subversion/branches/1.14.x/build.conf (original)
+++ subversion/branches/1.14.x/build.conf Tue Oct  8 09:20:13 2024
@@ -153,7 +153,7 @@ libs = libsvn_client libsvn_wc libsvn_ra
        apriconv apr
 manpages = subversion/svn/svn.1
 install = bin
-msvc-libs = setargv.obj
+msvc-libs = wsetargv.obj
 
 # The subversion repository administration tool
 [svnadmin]
@@ -163,7 +163,7 @@ path = subversion/svnadmin
 install = bin
 manpages = subversion/svnadmin/svnadmin.1
 libs = libsvn_repos libsvn_fs libsvn_delta libsvn_subr apriconv apr
-msvc-libs = setargv.obj
+msvc-libs = wsetargv.obj
 
 # The subversion repository dump filtering tool
 [svndumpfilter]

Modified: subversion/branches/1.14.x/subversion/include/private/svn_cmdline_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/1.14.x/subversion/include/private/svn_cmdline_private.h?rev=1921182&r1=1921181&r2=1921182&view=diff
==============================================================================
--- subversion/branches/1.14.x/subversion/include/private/svn_cmdline_private.h (original)
+++ subversion/branches/1.14.x/subversion/include/private/svn_cmdline_private.h Tue Oct  8 09:20:13 2024
@@ -278,6 +278,34 @@ svn_cmdline__stdin_readline(const char *
                             apr_pool_t *result_pool,
                             apr_pool_t *scratch_pool);
 
+#if defined(WIN32)
+/* Normalizes Windows-specific command line arguments, such as those passed
+   to wmain(), to the environment-specific code page. */
+svn_error_t *
+svn_cmdline__win32_get_cstring_argv(const char **cstring_argv_p[],
+                                    int argc,
+                                    const wchar_t *argv[],
+                                    apr_pool_t *result_pool);
+#endif
+
+/* Default platform-agnostic handler that normalizes command line arguments
+   to the environment-specific code page. */
+svn_error_t *
+svn_cmdline__default_get_cstring_argv(const char **cstring_argv_p[],
+                                      int argc,
+                                      const char *argv[],
+                                      apr_pool_t *result_pool);
+
+#if defined(WIN32) && defined(_MSC_VER)
+typedef wchar_t svn_cmdline__argv_char_t;
+#define SVN_CMDLINE__MAIN wmain
+#define svn_cmdline__get_cstring_argv svn_cmdline__win32_get_cstring_argv
+#else
+typedef char svn_cmdline__argv_char_t;
+#define SVN_CMDLINE__MAIN main
+#define svn_cmdline__get_cstring_argv svn_cmdline__default_get_cstring_argv
+#endif
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/1.14.x/subversion/libsvn_subr/cmdline.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.14.x/subversion/libsvn_subr/cmdline.c?rev=1921182&r1=1921181&r2=1921182&view=diff
==============================================================================
--- subversion/branches/1.14.x/subversion/libsvn_subr/cmdline.c (original)
+++ subversion/branches/1.14.x/subversion/libsvn_subr/cmdline.c Tue Oct  8 09:20:13 2024
@@ -1898,3 +1898,60 @@ svn_cmdline__cancellation_exit(void)
 #endif
     }
 }
+
+#if defined(WIN32)
+
+svn_error_t *
+svn_cmdline__win32_get_cstring_argv(const char **cstring_argv_p[],
+                                    int argc,
+                                    const wchar_t *argv[],
+                                    apr_pool_t *result_pool)
+{
+  apr_array_header_t *cstring_argv;
+  int i;
+
+  cstring_argv = apr_array_make(result_pool, argc + 1, sizeof(const char *));
+
+  for (i = 0; i < argc; i++)
+    {
+      const wchar_t *arg = argv[i];
+      char *cstring_arg;
+      int rv;
+
+      /* Passing -1 for the string length guarantees that the returned length
+         will account for a terminating null character. */
+      rv = WideCharToMultiByte(CP_ACP, 0, arg, -1, NULL, 0, NULL, NULL);
+      if (rv <= 0)
+        {
+          return svn_error_wrap_apr(apr_get_os_error(),
+                                    _("Conversion from UTF-16 failed"));
+        }
+
+      cstring_arg = apr_palloc(result_pool, rv);
+      rv = WideCharToMultiByte(CP_ACP, 0, arg, -1, cstring_arg, rv, NULL, NULL);
+      if (rv <= 0)
+        {
+          return svn_error_wrap_apr(apr_get_os_error(),
+                                    _("Conversion from UTF-16 failed"));
+        }
+
+      APR_ARRAY_PUSH(cstring_argv, const char *) = cstring_arg;
+    }
+
+  APR_ARRAY_PUSH(cstring_argv, const char *) = NULL;
+
+  *cstring_argv_p = (const char **)cstring_argv->elts;
+  return SVN_NO_ERROR;
+}
+
+#endif
+
+svn_error_t *
+svn_cmdline__default_get_cstring_argv(const char **cstring_argv_p[],
+                                      int argc,
+                                      const char *argv[],
+                                      apr_pool_t *result_pool)
+{
+  *cstring_argv_p = argv;
+  return SVN_NO_ERROR;
+}

Modified: subversion/branches/1.14.x/subversion/svn/svn.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.14.x/subversion/svn/svn.c?rev=1921182&r1=1921181&r2=1921182&view=diff
==============================================================================
--- subversion/branches/1.14.x/subversion/svn/svn.c (original)
+++ subversion/branches/1.14.x/subversion/svn/svn.c Tue Oct  8 09:20:13 2024
@@ -2019,7 +2019,10 @@ add_commands(const svn_opt_subcommand_de
  * return SVN_NO_ERROR.
  */
 static svn_error_t *
-sub_main(int *exit_code, int argc, const char *argv[], apr_pool_t *pool)
+sub_main(int *exit_code,
+         int argc,
+         const svn_cmdline__argv_char_t *cmdline_argv[],
+         apr_pool_t *pool)
 {
   svn_error_t *err;
   int opt_id;
@@ -2045,12 +2048,15 @@ sub_main(int *exit_code, int argc, const
   apr_hash_t *cfg_hash;
   svn_membuf_t buf;
   svn_boolean_t read_pass_from_stdin = FALSE;
+  const char **argv;
 
   received_opts = apr_array_make(pool, SVN_OPT_MAX_OPTIONS, sizeof(int));
 
   /* Check library versions */
   SVN_ERR(check_lib_versions());
 
+  SVN_ERR(svn_cmdline__get_cstring_argv(&argv, argc, cmdline_argv, pool));
+
 #if defined(WIN32) || defined(__CYGWIN__)
   /* Set the working copy administrative directory name. */
   if (getenv("SVN_ASP_DOT_NET_HACK"))
@@ -3324,7 +3330,7 @@ sub_main(int *exit_code, int argc, const
 }
 
 int
-main(int argc, const char *argv[])
+SVN_CMDLINE__MAIN(int argc, const svn_cmdline__argv_char_t *argv[])
 {
   apr_pool_t *pool;
   int exit_code = EXIT_SUCCESS;

Modified: subversion/branches/1.14.x/subversion/svnadmin/svnadmin.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.14.x/subversion/svnadmin/svnadmin.c?rev=1921182&r1=1921181&r2=1921182&view=diff
==============================================================================
--- subversion/branches/1.14.x/subversion/svnadmin/svnadmin.c (original)
+++ subversion/branches/1.14.x/subversion/svnadmin/svnadmin.c Tue Oct  8 09:20:13 2024
@@ -3053,7 +3053,10 @@ subcommand_build_repcache(apr_getopt_t *
  * return SVN_NO_ERROR.
  */
 static svn_error_t *
-sub_main(int *exit_code, int argc, const char *argv[], apr_pool_t *pool)
+sub_main(int *exit_code,
+         int argc,
+         const svn_cmdline__argv_char_t *cmdline_argv[],
+         apr_pool_t *pool)
 {
   svn_error_t *err;
   apr_status_t apr_err;
@@ -3065,12 +3068,15 @@ sub_main(int *exit_code, int argc, const
   apr_array_header_t *received_opts;
   int i;
   svn_boolean_t dash_F_arg = FALSE;
+  const char **argv;
 
   received_opts = apr_array_make(pool, SVN_OPT_MAX_OPTIONS, sizeof(int));
 
   /* Check library versions */
   SVN_ERR(check_lib_versions());
 
+  SVN_ERR(svn_cmdline__get_cstring_argv(&argv, argc, cmdline_argv, pool));
+
   /* Initialize the FS library. */
   SVN_ERR(svn_fs_initialize(pool));
 
@@ -3450,7 +3456,7 @@ sub_main(int *exit_code, int argc, const
 }
 
 int
-main(int argc, const char *argv[])
+SVN_CMDLINE__MAIN(int argc, const svn_cmdline__argv_char_t *argv[])
 {
   apr_pool_t *pool;
   int exit_code = EXIT_SUCCESS;

Modified: subversion/branches/1.14.x/subversion/svnbench/svnbench.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.14.x/subversion/svnbench/svnbench.c?rev=1921182&r1=1921181&r2=1921182&view=diff
==============================================================================
--- subversion/branches/1.14.x/subversion/svnbench/svnbench.c (original)
+++ subversion/branches/1.14.x/subversion/svnbench/svnbench.c Tue Oct  8 09:20:13 2024
@@ -386,7 +386,10 @@ add_search_pattern_group(svn_cl__opt_sta
  * return SVN_NO_ERROR.
  */
 static svn_error_t *
-sub_main(int *exit_code, int argc, const char *argv[], apr_pool_t *pool)
+sub_main(int *exit_code,
+         int argc,
+         const svn_cmdline__argv_char_t *cmdline_argv[],
+         apr_pool_t *pool)
 {
   svn_error_t *err;
   int opt_id;
@@ -405,6 +408,7 @@ sub_main(int *exit_code, int argc, const
   ra_progress_baton_t ra_progress_baton = {0};
   svn_membuf_t buf;
   svn_boolean_t read_pass_from_stdin = FALSE;
+  const char **argv;
 
   received_opts = apr_array_make(pool, SVN_OPT_MAX_OPTIONS, sizeof(int));
 
@@ -414,6 +418,8 @@ sub_main(int *exit_code, int argc, const
   /* Check library versions */
   SVN_ERR(check_lib_versions());
 
+  SVN_ERR(svn_cmdline__get_cstring_argv(&argv, argc, cmdline_argv, pool));
+
 #if defined(WIN32) || defined(__CYGWIN__)
   /* Set the working copy administrative directory name. */
   if (getenv("SVN_ASP_DOT_NET_HACK"))
@@ -1039,7 +1045,7 @@ sub_main(int *exit_code, int argc, const
 }
 
 int
-main(int argc, const char *argv[])
+SVN_CMDLINE__MAIN(int argc, const svn_cmdline__argv_char_t *argv[])
 {
   apr_pool_t *pool;
   int exit_code = EXIT_SUCCESS;

Modified: subversion/branches/1.14.x/subversion/svndumpfilter/svndumpfilter.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.14.x/subversion/svndumpfilter/svndumpfilter.c?rev=1921182&r1=1921181&r2=1921182&view=diff
==============================================================================
--- subversion/branches/1.14.x/subversion/svndumpfilter/svndumpfilter.c (original)
+++ subversion/branches/1.14.x/subversion/svndumpfilter/svndumpfilter.c Tue Oct  8 09:20:13 2024
@@ -1291,7 +1291,10 @@ subcommand_include(apr_getopt_t *os, voi
  * return SVN_NO_ERROR.
  */
 static svn_error_t *
-sub_main(int *exit_code, int argc, const char *argv[], apr_pool_t *pool)
+sub_main(int *exit_code,
+         int argc,
+         const svn_cmdline__argv_char_t *cmdline_argv[],
+         apr_pool_t *pool)
 {
   svn_error_t *err;
   apr_status_t apr_err;
@@ -1302,10 +1305,13 @@ sub_main(int *exit_code, int argc, const
   int opt_id;
   apr_array_header_t *received_opts;
   int i;
+  const char **argv;
 
   /* Check library versions */
   SVN_ERR(check_lib_versions());
 
+  SVN_ERR(svn_cmdline__get_cstring_argv(&argv, argc, cmdline_argv, pool));
+
   received_opts = apr_array_make(pool, SVN_OPT_MAX_OPTIONS, sizeof(int));
 
   /* Initialize the FS library. */
@@ -1564,7 +1570,7 @@ sub_main(int *exit_code, int argc, const
 }
 
 int
-main(int argc, const char *argv[])
+SVN_CMDLINE__MAIN(int argc, const svn_cmdline__argv_char_t *argv[])
 {
   apr_pool_t *pool;
   int exit_code = EXIT_SUCCESS;

Modified: subversion/branches/1.14.x/subversion/svnfsfs/svnfsfs.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.14.x/subversion/svnfsfs/svnfsfs.c?rev=1921182&r1=1921181&r2=1921182&view=diff
==============================================================================
--- subversion/branches/1.14.x/subversion/svnfsfs/svnfsfs.c (original)
+++ subversion/branches/1.14.x/subversion/svnfsfs/svnfsfs.c Tue Oct  8 09:20:13 2024
@@ -228,7 +228,10 @@ subcommand__help(apr_getopt_t *os, void
  * return SVN_NO_ERROR.
  */
 static svn_error_t *
-sub_main(int *exit_code, int argc, const char *argv[], apr_pool_t *pool)
+sub_main(int *exit_code,
+         int argc,
+         const svn_cmdline__argv_char_t *cmdline_argv[],
+         apr_pool_t *pool)
 {
   svn_error_t *err;
   apr_status_t apr_err;
@@ -239,12 +242,15 @@ sub_main(int *exit_code, int argc, const
   int opt_id;
   apr_array_header_t *received_opts;
   int i;
+  const char **argv;
 
   received_opts = apr_array_make(pool, SVN_OPT_MAX_OPTIONS, sizeof(int));
 
   /* Check library versions */
   SVN_ERR(check_lib_versions());
 
+  SVN_ERR(svn_cmdline__get_cstring_argv(&argv, argc, cmdline_argv, pool));
+
   /* Initialize the FS library. */
   SVN_ERR(svn_fs_initialize(pool));
 
@@ -473,7 +479,7 @@ sub_main(int *exit_code, int argc, const
 }
 
 int
-main(int argc, const char *argv[])
+SVN_CMDLINE__MAIN(int argc, const svn_cmdline__argv_char_t *argv[])
 {
   apr_pool_t *pool;
   int exit_code = EXIT_SUCCESS;

Modified: subversion/branches/1.14.x/subversion/svnlook/svnlook.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.14.x/subversion/svnlook/svnlook.c?rev=1921182&r1=1921181&r2=1921182&view=diff
==============================================================================
--- subversion/branches/1.14.x/subversion/svnlook/svnlook.c (original)
+++ subversion/branches/1.14.x/subversion/svnlook/svnlook.c Tue Oct  8 09:20:13 2024
@@ -2466,7 +2466,10 @@ subcommand_uuid(apr_getopt_t *os, void *
  * return SVN_NO_ERROR.
  */
 static svn_error_t *
-sub_main(int *exit_code, int argc, const char *argv[], apr_pool_t *pool)
+sub_main(int *exit_code,
+         int argc,
+         const svn_cmdline__argv_char_t *cmdline_argv[],
+         apr_pool_t *pool)
 {
   svn_error_t *err;
   apr_status_t apr_err;
@@ -2477,12 +2480,15 @@ sub_main(int *exit_code, int argc, const
   int opt_id;
   apr_array_header_t *received_opts;
   int i;
+  const char **argv;
 
   received_opts = apr_array_make(pool, SVN_OPT_MAX_OPTIONS, sizeof(int));
 
   /* Check library versions */
   SVN_ERR(check_lib_versions());
 
+  SVN_ERR(svn_cmdline__get_cstring_argv(&argv, argc, cmdline_argv, pool));
+
   /* Initialize the FS library. */
   SVN_ERR(svn_fs_initialize(pool));
 
@@ -2849,7 +2855,7 @@ sub_main(int *exit_code, int argc, const
 }
 
 int
-main(int argc, const char *argv[])
+SVN_CMDLINE__MAIN(int argc, const svn_cmdline__argv_char_t *argv[])
 {
   apr_pool_t *pool;
   int exit_code = EXIT_SUCCESS;

Modified: subversion/branches/1.14.x/subversion/svnmucc/svnmucc.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.14.x/subversion/svnmucc/svnmucc.c?rev=1921182&r1=1921181&r2=1921182&view=diff
==============================================================================
--- subversion/branches/1.14.x/subversion/svnmucc/svnmucc.c (original)
+++ subversion/branches/1.14.x/subversion/svnmucc/svnmucc.c Tue Oct  8 09:20:13 2024
@@ -467,7 +467,10 @@ log_message_func(const char **log_msg,
  * return SVN_NO_ERROR.
  */
 static svn_error_t *
-sub_main(int *exit_code, int argc, const char *argv[], apr_pool_t *pool)
+sub_main(int *exit_code,
+         int argc,
+         const svn_cmdline__argv_char_t *cmdline_argv[],
+         apr_pool_t *pool)
 {
   apr_array_header_t *actions = apr_array_make(pool, 1,
                                                sizeof(struct action *));
@@ -533,10 +536,13 @@ sub_main(int *exit_code, int argc, const
   struct log_message_baton lmb;
   int i;
   svn_boolean_t read_pass_from_stdin = FALSE;
+  const char **argv;
 
   /* Check library versions */
   SVN_ERR(check_lib_versions());
 
+  SVN_ERR(svn_cmdline__get_cstring_argv(&argv, argc, cmdline_argv, pool));
+
   /* Initialize the RA library. */
   SVN_ERR(svn_ra_initialize(pool));
 
@@ -980,7 +986,7 @@ sub_main(int *exit_code, int argc, const
 }
 
 int
-main(int argc, const char *argv[])
+SVN_CMDLINE__MAIN(int argc, const svn_cmdline__argv_char_t *argv[])
 {
   apr_pool_t *pool;
   int exit_code = EXIT_SUCCESS;

Modified: subversion/branches/1.14.x/subversion/svnrdump/svnrdump.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.14.x/subversion/svnrdump/svnrdump.c?rev=1921182&r1=1921181&r2=1921182&view=diff
==============================================================================
--- subversion/branches/1.14.x/subversion/svnrdump/svnrdump.c (original)
+++ subversion/branches/1.14.x/subversion/svnrdump/svnrdump.c Tue Oct  8 09:20:13 2024
@@ -784,7 +784,10 @@ validate_and_resolve_revisions(opt_baton
  * return SVN_NO_ERROR.
  */
 static svn_error_t *
-sub_main(int *exit_code, int argc, const char *argv[], apr_pool_t *pool)
+sub_main(int *exit_code,
+         int argc,
+         const svn_cmdline__argv_char_t *cmdline_argv[],
+         apr_pool_t *pool)
 {
   svn_error_t *err = SVN_NO_ERROR;
   const svn_opt_subcommand_desc3_t *subcommand = NULL;
@@ -806,6 +809,9 @@ sub_main(int *exit_code, int argc, const
   apr_array_header_t *received_opts;
   int i;
   svn_boolean_t read_pass_from_stdin = FALSE;
+  const char **argv;
+
+  SVN_ERR(svn_cmdline__get_cstring_argv(&argv, argc, cmdline_argv, pool));
 
   opt_baton = apr_pcalloc(pool, sizeof(*opt_baton));
   opt_baton->start_revision.kind = svn_opt_revision_unspecified;
@@ -1155,7 +1161,7 @@ sub_main(int *exit_code, int argc, const
 }
 
 int
-main(int argc, const char *argv[])
+SVN_CMDLINE__MAIN(int argc, const svn_cmdline__argv_char_t *argv[])
 {
   apr_pool_t *pool;
   int exit_code = EXIT_SUCCESS;

Modified: subversion/branches/1.14.x/subversion/svnserve/svnserve.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.14.x/subversion/svnserve/svnserve.c?rev=1921182&r1=1921181&r2=1921182&view=diff
==============================================================================
--- subversion/branches/1.14.x/subversion/svnserve/svnserve.c (original)
+++ subversion/branches/1.14.x/subversion/svnserve/svnserve.c Tue Oct  8 09:20:13 2024
@@ -703,7 +703,10 @@ check_lib_versions(void)
  * return SVN_NO_ERROR.
  */
 static svn_error_t *
-sub_main(int *exit_code, int argc, const char *argv[], apr_pool_t *pool)
+sub_main(int *exit_code,
+         int argc,
+         const svn_cmdline__argv_char_t *cmdline_argv[],
+         apr_pool_t *pool)
 {
   enum run_mode run_mode = run_mode_unspecified;
   svn_boolean_t foreground = FALSE;
@@ -742,6 +745,8 @@ sub_main(int *exit_code, int argc, const
   svn_node_kind_t kind;
   apr_size_t min_thread_count = THREADPOOL_MIN_SIZE;
   apr_size_t max_thread_count = THREADPOOL_MAX_SIZE;
+  const char **argv;
+
 #ifdef SVN_HAVE_SASL
   SVN_ERR(cyrus_init(pool));
 #endif
@@ -749,6 +754,8 @@ sub_main(int *exit_code, int argc, const
   /* Check library versions */
   SVN_ERR(check_lib_versions());
 
+  SVN_ERR(svn_cmdline__get_cstring_argv(&argv, argc, cmdline_argv, pool));
+
   /* Initialize the FS library. */
   SVN_ERR(svn_fs_initialize(pool));
 
@@ -1395,7 +1402,7 @@ sub_main(int *exit_code, int argc, const
 }
 
 int
-main(int argc, const char *argv[])
+SVN_CMDLINE__MAIN(int argc, const svn_cmdline__argv_char_t *argv[])
 {
   apr_pool_t *pool;
   int exit_code = EXIT_SUCCESS;

Modified: subversion/branches/1.14.x/subversion/svnsync/svnsync.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.14.x/subversion/svnsync/svnsync.c?rev=1921182&r1=1921181&r2=1921182&view=diff
==============================================================================
--- subversion/branches/1.14.x/subversion/svnsync/svnsync.c (original)
+++ subversion/branches/1.14.x/subversion/svnsync/svnsync.c Tue Oct  8 09:20:13 2024
@@ -1963,7 +1963,10 @@ help_cmd(apr_getopt_t *os, void *baton,
  * return SVN_NO_ERROR.
  */
 static svn_error_t *
-sub_main(int *exit_code, int argc, const char *argv[], apr_pool_t *pool)
+sub_main(int *exit_code,
+         int argc,
+         const svn_cmdline__argv_char_t *cmdline_argv[],
+         apr_pool_t *pool)
 {
   const svn_opt_subcommand_desc3_t *subcommand = NULL;
   apr_array_header_t *received_opts;
@@ -1978,10 +1981,13 @@ sub_main(int *exit_code, int argc, const
   apr_array_header_t *config_options = NULL;
   const char *source_prop_encoding = NULL;
   svn_boolean_t force_interactive = FALSE;
+  const char **argv;
 
   /* Check library versions */
   SVN_ERR(check_lib_versions());
 
+  SVN_ERR(svn_cmdline__get_cstring_argv(&argv, argc, cmdline_argv, pool));
+
   SVN_ERR(svn_ra_initialize(pool));
 
   /* Initialize the option baton. */
@@ -2402,7 +2408,7 @@ sub_main(int *exit_code, int argc, const
 }
 
 int
-main(int argc, const char *argv[])
+SVN_CMDLINE__MAIN(int argc, const svn_cmdline__argv_char_t *argv[])
 {
   apr_pool_t *pool;
   int exit_code = EXIT_SUCCESS;

Modified: subversion/branches/1.14.x/subversion/svnversion/svnversion.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.14.x/subversion/svnversion/svnversion.c?rev=1921182&r1=1921181&r2=1921182&view=diff
==============================================================================
--- subversion/branches/1.14.x/subversion/svnversion/svnversion.c (original)
+++ subversion/branches/1.14.x/subversion/svnversion/svnversion.c Tue Oct  8 09:20:13 2024
@@ -124,7 +124,10 @@ check_lib_versions(void)
  * program.  Obviously we don't want to have to run svn when building svn.
  */
 static svn_error_t *
-sub_main(int *exit_code, int argc, const char *argv[], apr_pool_t *pool)
+sub_main(int *exit_code,
+         int argc,
+         const svn_cmdline__argv_char_t *cmdline_argv[],
+         apr_pool_t *pool)
 {
   const char *wc_path, *trail_url;
   const char *local_abspath;
@@ -146,10 +149,13 @@ sub_main(int *exit_code, int argc, const
        N_("no progress (only errors) to stderr")},
       {0,             0,  0,  0}
     };
+  const char **argv;
 
   /* Check library versions */
   SVN_ERR(check_lib_versions());
 
+  SVN_ERR(svn_cmdline__get_cstring_argv(&argv, argc, cmdline_argv, pool));
+
 #if defined(WIN32) || defined(__CYGWIN__)
   /* Set the working copy administrative directory name. */
   if (getenv("SVN_ASP_DOT_NET_HACK"))
@@ -289,7 +295,7 @@ sub_main(int *exit_code, int argc, const
 }
 
 int
-main(int argc, const char *argv[])
+SVN_CMDLINE__MAIN(int argc, const svn_cmdline__argv_char_t *argv[])
 {
   apr_pool_t *pool;
   int exit_code = EXIT_SUCCESS;

Modified: subversion/branches/1.14.x/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.14.x/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c?rev=1921182&r1=1921181&r2=1921182&view=diff
==============================================================================
--- subversion/branches/1.14.x/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c (original)
+++ subversion/branches/1.14.x/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c Tue Oct  8 09:20:13 2024
@@ -408,7 +408,10 @@ svn_min__check_cancel(void *baton)
  * return SVN_NO_ERROR.
  */
 static svn_error_t *
-sub_main(int *exit_code, int argc, const char *argv[], apr_pool_t *pool)
+sub_main(int *exit_code,
+         int argc,
+         const svn_cmdline__argv_char_t *cmdline_argv[],
+         apr_pool_t *pool)
 {
   svn_error_t *err;
   int opt_id;
@@ -425,12 +428,15 @@ sub_main(int *exit_code, int argc, const
   svn_boolean_t force_interactive = FALSE;
   apr_hash_t *cfg_hash;
   svn_boolean_t read_pass_from_stdin = FALSE;
+  const char **argv;
 
   received_opts = apr_array_make(pool, SVN_OPT_MAX_OPTIONS, sizeof(int));
 
   /* Check library versions */
   SVN_ERR(check_lib_versions());
 
+  SVN_ERR(svn_cmdline__get_cstring_argv(&argv, argc, cmdline_argv, pool));
+
 #if defined(WIN32) || defined(__CYGWIN__)
   /* Set the working copy administrative directory name. */
   if (getenv("SVN_ASP_DOT_NET_HACK"))
@@ -946,7 +952,7 @@ sub_main(int *exit_code, int argc, const
 }
 
 int
-main(int argc, const char *argv[])
+SVN_CMDLINE__MAIN(int argc, const svn_cmdline__argv_char_t *argv[])
 {
   apr_pool_t *pool;
   int exit_code = EXIT_SUCCESS;

Modified: subversion/branches/1.14.x/tools/client-side/svnconflict/svnconflict.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.14.x/tools/client-side/svnconflict/svnconflict.c?rev=1921182&r1=1921181&r2=1921182&view=diff
==============================================================================
--- subversion/branches/1.14.x/tools/client-side/svnconflict/svnconflict.c (original)
+++ subversion/branches/1.14.x/tools/client-side/svnconflict/svnconflict.c Tue Oct  8 09:20:13 2024
@@ -632,7 +632,10 @@ svnconflict_resolve_tree(apr_getopt_t *o
  * return SVN_NO_ERROR.
  */
 static svn_error_t *
-sub_main(int *exit_code, int argc, const char *argv[], apr_pool_t *pool)
+sub_main(int *exit_code,
+         int argc,
+         const svn_cmdline__argv_char_t *cmdline_argv[],
+         apr_pool_t *pool)
 {
   svn_error_t *err;
   int opt_id;
@@ -647,12 +650,15 @@ sub_main(int *exit_code, int argc, const
   svn_config_t *cfg_config;
   apr_hash_t *cfg_hash;
   svn_boolean_t read_pass_from_stdin = FALSE;
+  const char **argv;
 
   received_opts = apr_array_make(pool, SVN_OPT_MAX_OPTIONS, sizeof(int));
 
   /* Check library versions */
   SVN_ERR(check_lib_versions());
 
+  SVN_ERR(svn_cmdline__get_cstring_argv(&argv, argc, cmdline_argv, pool));
+
 #if defined(WIN32) || defined(__CYGWIN__)
   /* Set the working copy administrative directory name. */
   if (getenv("SVN_ASP_DOT_NET_HACK"))
@@ -949,7 +955,7 @@ sub_main(int *exit_code, int argc, const
 }
 
 int
-main(int argc, const char *argv[])
+SVN_CMDLINE__MAIN(int argc, const svn_cmdline__argv_char_t *argv[])
 {
   apr_pool_t *pool;
   int exit_code = EXIT_SUCCESS;

Modified: subversion/branches/1.14.x/tools/dev/svnraisetreeconflict/svnraisetreeconflict.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.14.x/tools/dev/svnraisetreeconflict/svnraisetreeconflict.c?rev=1921182&r1=1921181&r2=1921182&view=diff
==============================================================================
--- subversion/branches/1.14.x/tools/dev/svnraisetreeconflict/svnraisetreeconflict.c (original)
+++ subversion/branches/1.14.x/tools/dev/svnraisetreeconflict/svnraisetreeconflict.c Tue Oct  8 09:20:13 2024
@@ -302,7 +302,10 @@ check_lib_versions(void)
  * return SVN_NO_ERROR.
  */
 static svn_error_t *
-sub_main(int *exit_code, int argc, const char *argv[], apr_pool_t *pool)
+sub_main(int *exit_code,
+         int argc,
+         const svn_cmdline__argv_char_t *cmdline_argv[],
+         apr_pool_t *pool)
 {
   apr_getopt_t *os;
   const apr_getopt_option_t options[] =
@@ -313,10 +316,13 @@ sub_main(int *exit_code, int argc, const
       {0,             0,  0,  0}
     };
   apr_array_header_t *remaining_argv;
+  const char **argv;
 
   /* Check library versions */
   SVN_ERR(check_lib_versions());
 
+  SVN_ERR(svn_cmdline__get_cstring_argv(&argv, argc, cmdline_argv, pool));
+
 #if defined(WIN32) || defined(__CYGWIN__)
   /* Set the working copy administrative directory name. */
   if (getenv("SVN_ASP_DOT_NET_HACK"))
@@ -383,7 +389,7 @@ sub_main(int *exit_code, int argc, const
 }
 
 int
-main(int argc, const char *argv[])
+SVN_CMDLINE__MAIN(int argc, const svn_cmdline__argv_char_t *argv[])
 {
   apr_pool_t *pool;
   int exit_code = EXIT_SUCCESS;

Modified: subversion/branches/1.14.x/tools/dev/wc-ng/svn-wc-db-tester.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.14.x/tools/dev/wc-ng/svn-wc-db-tester.c?rev=1921182&r1=1921181&r2=1921182&view=diff
==============================================================================
--- subversion/branches/1.14.x/tools/dev/wc-ng/svn-wc-db-tester.c (original)
+++ subversion/branches/1.14.x/tools/dev/wc-ng/svn-wc-db-tester.c Tue Oct  8 09:20:13 2024
@@ -156,7 +156,10 @@ check_lib_versions(void)
  * return SVN_NO_ERROR.
  */
 static svn_error_t *
-sub_main(int *exit_code, int argc, const char *argv[], apr_pool_t *pool)
+sub_main(int *exit_code,
+         int argc,
+         const svn_cmdline__argv_char_t *cmdline_argv[],
+         apr_pool_t *pool)
 {
   apr_getopt_t *os;
   const apr_getopt_option_t options[] =
@@ -167,10 +170,13 @@ sub_main(int *exit_code, int argc, const
       {0,             0,  0,  0}
     };
   apr_array_header_t *remaining_argv;
+  const char **argv;
 
   /* Check library versions */
   SVN_ERR(check_lib_versions());
 
+  SVN_ERR(svn_cmdline__get_cstring_argv(&argv, argc, cmdline_argv, pool));
+
 #if defined(WIN32) || defined(__CYGWIN__)
   /* Set the working copy administrative directory name. */
   if (getenv("SVN_ASP_DOT_NET_HACK"))
@@ -237,7 +243,7 @@ sub_main(int *exit_code, int argc, const
 }
 
 int
-main(int argc, const char *argv[])
+SVN_CMDLINE__MAIN(int argc, const svn_cmdline__argv_char_t *argv[])
 {
   apr_pool_t *pool;
   int exit_code = EXIT_SUCCESS;

Modified: subversion/branches/1.14.x/tools/server-side/svnauthz.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.14.x/tools/server-side/svnauthz.c?rev=1921182&r1=1921181&r2=1921182&view=diff
==============================================================================
--- subversion/branches/1.14.x/tools/server-side/svnauthz.c (original)
+++ subversion/branches/1.14.x/tools/server-side/svnauthz.c Tue Oct  8 09:20:13 2024
@@ -490,7 +490,10 @@ canonicalize_access_file(const char **ca
  * return SVN_NO_ERROR.
  */
 static svn_error_t *
-sub_main(int *exit_code, int argc, const char *argv[], apr_pool_t *pool)
+sub_main(int *exit_code,
+         int argc,
+         const svn_cmdline__argv_char_t *cmdline_argv[],
+         apr_pool_t *pool)
 {
   svn_error_t *err;
 
@@ -499,6 +502,9 @@ sub_main(int *exit_code, int argc, const
   apr_getopt_t *os;
   apr_array_header_t *received_opts;
   int i;
+  const char **argv;
+
+  SVN_ERR(svn_cmdline__get_cstring_argv(&argv, argc, cmdline_argv, pool));
 
   /* Initialize the FS library. */
   SVN_ERR(svn_fs_initialize(pool));
@@ -752,14 +758,14 @@ sub_main(int *exit_code, int argc, const
 }
 
 int
-main(int argc, const char *argv[])
+SVN_CMDLINE__MAIN(int argc, const svn_cmdline__argv_char_t *argv[])
 {
   apr_pool_t *pool;
   int exit_code = EXIT_SUCCESS;
   svn_error_t *err;
 
   /* Initialize the app.  Send all error messages to 'stderr'.  */
-  if (svn_cmdline_init(argv[0], stderr) != EXIT_SUCCESS)
+  if (svn_cmdline_init("svnauthz", stderr) != EXIT_SUCCESS)
     return EXIT_FAILURE;
 
   pool = svn_pool_create(NULL);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.