aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2020-04-03 17:03:35 +0200
committerChristian Grothoff <christian@grothoff.org>2020-04-03 17:03:35 +0200
commit55bff52a2a38b9e768b929b4b6204ac02f074cbf (patch)
treeff92e8a3772021d27dcf9f1365348679dc036b31 /src
parent0541fd19426994e42decf5987253978634e1f865 (diff)
downloadgnunet-55bff52a2a38b9e768b929b4b6204ac02f074cbf.tar.gz
gnunet-55bff52a2a38b9e768b929b4b6204ac02f074cbf.zip
fix #6159 and related issues
Diffstat (limited to 'src')
-rw-r--r--src/util/strings.c32
1 files changed, 24 insertions, 8 deletions
diff --git a/src/util/strings.c b/src/util/strings.c
index 54a594c51..8740eab58 100644
--- a/src/util/strings.c
+++ b/src/util/strings.c
@@ -521,9 +521,14 @@ fail:
521 * string is returned. 521 * string is returned.
522 */ 522 */
523char * 523char *
524GNUNET_STRINGS_to_utf8 (const char *input, size_t len, const char *charset) 524GNUNET_STRINGS_to_utf8 (const char *input,
525 size_t len,
526 const char *charset)
525{ 527{
526 return GNUNET_STRINGS_conv (input, len, charset, "UTF-8"); 528 return GNUNET_STRINGS_conv (input,
529 len,
530 charset,
531 "UTF-8");
527} 532}
528 533
529 534
@@ -539,9 +544,14 @@ GNUNET_STRINGS_to_utf8 (const char *input, size_t len, const char *charset)
539 * string is returned. 544 * string is returned.
540 */ 545 */
541char * 546char *
542GNUNET_STRINGS_from_utf8 (const char *input, size_t len, const char *charset) 547GNUNET_STRINGS_from_utf8 (const char *input,
548 size_t len,
549 const char *charset)
543{ 550{
544 return GNUNET_STRINGS_conv (input, len, "UTF-8", charset); 551 return GNUNET_STRINGS_conv (input,
552 len,
553 "UTF-8",
554 charset);
545} 555}
546 556
547 557
@@ -871,6 +881,7 @@ GNUNET_STRINGS_data_to_string (const void *data,
871 unsigned int vbit; 881 unsigned int vbit;
872 const unsigned char *udata; 882 const unsigned char *udata;
873 883
884 GNUNET_assert (size < SIZE_MAX / 8 - 4);
874 udata = data; 885 udata = data;
875 if (out_size < (size * 8 + 4) / 5) 886 if (out_size < (size * 8 + 4) / 5)
876 { 887 {
@@ -930,7 +941,10 @@ GNUNET_STRINGS_data_to_string_alloc (const void *buf, size_t size)
930 len += 5 - len % 5; 941 len += 5 - len % 5;
931 len /= 5; 942 len /= 5;
932 str_buf = GNUNET_malloc (len + 1); 943 str_buf = GNUNET_malloc (len + 1);
933 end = GNUNET_STRINGS_data_to_string (buf, size, str_buf, len); 944 end = GNUNET_STRINGS_data_to_string (buf,
945 size,
946 str_buf,
947 len);
934 if (NULL == end) 948 if (NULL == end)
935 { 949 {
936 GNUNET_free (str_buf); 950 GNUNET_free (str_buf);
@@ -1404,15 +1418,14 @@ static char *const *
1404_make_continuous_arg_copy (int argc, char *const *argv) 1418_make_continuous_arg_copy (int argc, char *const *argv)
1405{ 1419{
1406 size_t argvsize = 0; 1420 size_t argvsize = 0;
1407 int i;
1408 char **new_argv; 1421 char **new_argv;
1409 char *p; 1422 char *p;
1410 1423
1411 for (i = 0; i < argc; i++) 1424 for (int i = 0; i < argc; i++)
1412 argvsize += strlen (argv[i]) + 1 + sizeof(char *); 1425 argvsize += strlen (argv[i]) + 1 + sizeof(char *);
1413 new_argv = GNUNET_malloc (argvsize + sizeof(char *)); 1426 new_argv = GNUNET_malloc (argvsize + sizeof(char *));
1414 p = (char *) &new_argv[argc + 1]; 1427 p = (char *) &new_argv[argc + 1];
1415 for (i = 0; i < argc; i++) 1428 for (int i = 0; i < argc; i++)
1416 { 1429 {
1417 new_argv[i] = p; 1430 new_argv[i] = p;
1418 strcpy (p, argv[i]); 1431 strcpy (p, argv[i]);
@@ -1862,6 +1875,7 @@ GNUNET_STRINGS_base64_encode (const void *in, size_t len, char **output)
1862 char *opt; 1875 char *opt;
1863 1876
1864 ret = 0; 1877 ret = 0;
1878 GNUNET_assert (len / 4 < SIZE_MAX);
1865 opt = GNUNET_malloc (2 + (len * 4 / 3) + 8); 1879 opt = GNUNET_malloc (2 + (len * 4 / 3) + 8);
1866 for (size_t i = 0; i < len; ++i) 1880 for (size_t i = 0; i < len; ++i)
1867 { 1881 {
@@ -1971,6 +1985,7 @@ GNUNET_STRINGS_base64_decode (const char *data, size_t len, void **out)
1971 goto END; \ 1985 goto END; \
1972 } 1986 }
1973 1987
1988 GNUNET_assert (len / 3 < SIZE_MAX);
1974 output = GNUNET_malloc ((len * 3 / 4) + 8); 1989 output = GNUNET_malloc ((len * 3 / 4) + 8);
1975 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1990 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1976 "base64_decode decoding len=%d\n", 1991 "base64_decode decoding len=%d\n",
@@ -2034,6 +2049,7 @@ GNUNET_STRINGS_base64url_decode (const char *data, size_t len, void **out)
2034 size_t ret; 2049 size_t ret;
2035 2050
2036 /* make enough space for padding */ 2051 /* make enough space for padding */
2052 GNUNET_assert (len < SIZE_MAX - 3);
2037 s = GNUNET_malloc (len + 3); 2053 s = GNUNET_malloc (len + 3);
2038 memcpy (s, data, len); 2054 memcpy (s, data, len);
2039 2055