You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by iv...@apache.org on 2015/10/03 14:41:49 UTC
svn commit: r1706565 - /subversion/trunk/subversion/libsvn_diff/diff_file.c
Author: ivan
Date: Sat Oct 3 12:41:49 2015
New Revision: 1706565
URL: http://svn.apache.org/viewvc?rev=1706565&view=rev
Log:
Make code slightly more safe.
* subversion/libsvn_diff/diff_file.c
(svn_diff_file_options_parse): Use APR array instead of apr_palloc() and
memcpy().
Modified:
subversion/trunk/subversion/libsvn_diff/diff_file.c
Modified: subversion/trunk/subversion/libsvn_diff/diff_file.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_diff/diff_file.c?rev=1706565&r1=1706564&r2=1706565&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_diff/diff_file.c (original)
+++ subversion/trunk/subversion/libsvn_diff/diff_file.c Sat Oct 3 12:41:49 2015
@@ -1242,17 +1242,20 @@ svn_diff_file_options_parse(svn_diff_fil
{
apr_getopt_t *os;
struct opt_parsing_error_baton_t opt_parsing_error_baton;
- /* Make room for each option (starting at index 1) plus trailing NULL. */
- const char **argv = apr_palloc(pool, sizeof(char*) * (args->nelts + 2));
+ apr_array_header_t *argv;
opt_parsing_error_baton.err = NULL;
opt_parsing_error_baton.pool = pool;
- argv[0] = "";
- memcpy(argv + 1, args->elts, sizeof(char*) * args->nelts);
- argv[args->nelts + 1] = NULL;
+ /* Make room for each option (starting at index 1) plus trailing NULL. */
+ argv = apr_array_make(pool, args->nelts + 2, sizeof(char*));
+ APR_ARRAY_PUSH(argv, const char *) = "";
+ apr_array_cat(argv, args);
+ APR_ARRAY_PUSH(argv, const char *) = NULL;
- apr_getopt_init(&os, pool, args->nelts + 1, argv);
+ apr_getopt_init(&os, pool,
+ argv->nelts - 1 /* Exclude trailing NULL */,
+ (const char *const *) argv->elts);
/* Capture any error message from apr_getopt_long(). This will typically
* say which option is wrong, which we would not otherwise know. */