aboutsummaryrefslogtreecommitdiff
path: root/src/lib/util/strings.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/util/strings.c')
-rw-r--r--src/lib/util/strings.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/lib/util/strings.c b/src/lib/util/strings.c
index 8498e74d3..f3ef0483d 100644
--- a/src/lib/util/strings.c
+++ b/src/lib/util/strings.c
@@ -1198,14 +1198,21 @@ GNUNET_STRINGS_parse_socket_addr (const char *addr,
1198 * freed with a single call to GNUNET_free(); 1198 * freed with a single call to GNUNET_free();
1199 */ 1199 */
1200static char *const * 1200static char *const *
1201_make_continuous_arg_copy (int argc, char *const *argv) 1201_make_continuous_arg_copy (int argc,
1202 char *const *argv)
1202{ 1203{
1203 size_t argvsize = 0; 1204 size_t argvsize = 0;
1204 char **new_argv; 1205 char **new_argv;
1205 char *p; 1206 char *p;
1206 1207
1207 for (int i = 0; i < argc; i++) 1208 for (int i = 0; i < argc; i++)
1209 {
1210 size_t ail = strlen (argv[i]);
1211
1212 GNUNET_assert (SIZE_MAX - 1 - sizeof (char *) > argvsize);
1213 GNUNET_assert (SIZE_MAX - ail > argvsize + 1 + sizeof (char*));
1208 argvsize += strlen (argv[i]) + 1 + sizeof(char *); 1214 argvsize += strlen (argv[i]) + 1 + sizeof(char *);
1215 }
1209 new_argv = GNUNET_malloc (argvsize + sizeof(char *)); 1216 new_argv = GNUNET_malloc (argvsize + sizeof(char *));
1210 p = (char *) &new_argv[argc + 1]; 1217 p = (char *) &new_argv[argc + 1];
1211 for (int i = 0; i < argc; i++) 1218 for (int i = 0; i < argc; i++)