diff options
Diffstat (limited to 'src/lib/util/strings.c')
-rw-r--r-- | src/lib/util/strings.c | 9 |
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 | */ |
1200 | static char *const * | 1200 | static 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++) |