From e771c3aaeede1c4980e587807017c40424d6b091 Mon Sep 17 00:00:00 2001 From: Stephen Kent Date: Thu, 18 Aug 2016 10:13:37 -0700 Subject: [PATCH] Read arbitrary hostname lengths on the command line --- cmdline.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/cmdline.c b/cmdline.c index 28d321f..c836723 100644 --- a/cmdline.c +++ b/cmdline.c @@ -503,12 +503,18 @@ int cmdline_parser( int argc, char * const *argv, struct gengetopt_args_info *ar } if (args_info->proxy_given ) { + char proxy_arg_fmt[32]; + size_t proxy_arg_len; char * phost; int pport; - phost = malloc( 50+1 ); - - r = sscanf( args_info->proxy_arg, "%50[^:]:%5u", phost, &pport ); + proxy_arg_len = strlen( args_info->proxy_arg ); + if ( (phost = malloc( proxy_arg_len + 1 )) == NULL ) { + message( "Out of memory\n" ); + exit(1); + } + snprintf( proxy_arg_fmt, sizeof(proxy_arg_fmt), "%%%zu[^:]:%%5u", proxy_arg_len - 1 ); + r = sscanf( args_info->proxy_arg, proxy_arg_fmt, phost, &pport ); if ( r == 2 ) { args_info->proxyhost_arg = phost; args_info->proxyport_arg = pport;