aboutsummaryrefslogtreecommitdiff
path: root/src/lib/util/strings.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2024-01-09 19:35:47 +0100
committerChristian Grothoff <christian@grothoff.org>2024-01-09 19:35:47 +0100
commitca54e4933d99caf51450643ab96e98f00b9b4c64 (patch)
tree7b6d449c3f6bcfdb1227fdccb838a97937e698ca /src/lib/util/strings.c
parent57ba1868520f09b41e08cfd79b89477efb9bce7d (diff)
downloadgnunet-ca54e4933d99caf51450643ab96e98f00b9b4c64.tar.gz
gnunet-ca54e4933d99caf51450643ab96e98f00b9b4c64.zip
fix #8048
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++)