From 6ddfa55804cca3706e4f9fe803a76b7bc5310d47 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sat, 6 Jan 2018 16:37:32 +0100 Subject: [PATCH] fix indentation and use after free in tcp plugin --- src/fs/fs_download.c | 3 +- src/fs/gnunet-download.c | 145 ++++++++++++++++----------- src/regex/regex_test_lib.c | 12 +-- src/transport/plugin_transport_tcp.c | 4 +- 4 files changed, 98 insertions(+), 66 deletions(-) diff --git a/src/fs/fs_download.c b/src/fs/fs_download.c index ce852f2d0..c2a3d4c5d 100644 --- a/src/fs/fs_download.c +++ b/src/fs/fs_download.c @@ -37,7 +37,8 @@ static int is_recursive_download (struct GNUNET_FS_DownloadContext *dc) { return (0 != (dc->options & GNUNET_FS_DOWNLOAD_OPTION_RECURSIVE)) && - ( (GNUNET_YES == GNUNET_FS_meta_data_test_for_directory (dc->meta)) || + ( (GNUNET_YES == + GNUNET_FS_meta_data_test_for_directory (dc->meta)) || ( (NULL == dc->meta) && ( (NULL == dc->filename) || ( (strlen (dc->filename) >= strlen (GNUNET_FS_DIRECTORY_EXT)) && diff --git a/src/fs/gnunet-download.c b/src/fs/gnunet-download.c index 83c1eb505..27266a18a 100644 --- a/src/fs/gnunet-download.c +++ b/src/fs/gnunet-download.c @@ -124,7 +124,8 @@ display_bar (unsigned long long x, * field in the `struct GNUNET_FS_ProgressInfo` */ static void * -progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *info) +progress_cb (void *cls, + const struct GNUNET_FS_ProgressInfo *info) { char *s; const char *s2; @@ -134,7 +135,8 @@ progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *info) { case GNUNET_FS_STATUS_DOWNLOAD_START: if (verbose > 1) - FPRINTF (stderr, _("Starting download `%s'.\n"), + FPRINTF (stderr, + _("Starting download `%s'.\n"), info->value.download.filename); break; case GNUNET_FS_STATUS_DOWNLOAD_PROGRESS: @@ -146,8 +148,7 @@ progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *info) == GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us) s2 = _(""); else - s2 = GNUNET_STRINGS_relative_time_to_string ( - info->value.download.specifics.progress.block_download_duration, + s2 = GNUNET_STRINGS_relative_time_to_string (info->value.download.specifics.progress.block_download_duration, GNUNET_YES); t = GNUNET_STRINGS_byte_size_fancy (info->value.download.completed * 1000LL / @@ -157,7 +158,10 @@ progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *info) _("Downloading `%s' at %llu/%llu (%s remaining, %s/s). Block took %s to download\n"), info->value.download.filename, (unsigned long long) info->value.download.completed, - (unsigned long long) info->value.download.size, s, t, s2); + (unsigned long long) info->value.download.size, + s, + t, + s2); GNUNET_free (s); GNUNET_free (t); } @@ -173,7 +177,8 @@ progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *info) if (0 != isatty (1)) fprintf (stdout, "\n"); #else - if (FILE_TYPE_CHAR == GetFileType (GetStdHandle (STD_OUTPUT_HANDLE))) + if (FILE_TYPE_CHAR == + GetFileType (GetStdHandle (STD_OUTPUT_HANDLE))) fprintf (stdout, "\n"); #endif FPRINTF (stderr, _("Error downloading: %s.\n"), @@ -188,10 +193,12 @@ progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *info) if (0 != isatty (1)) fprintf (stdout, "\n"); #else - if (FILE_TYPE_CHAR == GetFileType (GetStdHandle (STD_OUTPUT_HANDLE))) + if (FILE_TYPE_CHAR == + GetFileType (GetStdHandle (STD_OUTPUT_HANDLE))) fprintf (stdout, "\n"); #endif - FPRINTF (stdout, _("Downloading `%s' done (%s/s).\n"), + FPRINTF (stdout, + _("Downloading `%s' done (%s/s).\n"), info->value.download.filename, s); GNUNET_free (s); if (info->value.download.dc == dc) @@ -205,7 +212,9 @@ progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *info) case GNUNET_FS_STATUS_DOWNLOAD_INACTIVE: break; default: - FPRINTF (stderr, _("Unexpected status: %d\n"), info->status); + FPRINTF (stderr, + _("Unexpected status: %d\n"), + info->status); break; } return NULL; @@ -221,7 +230,9 @@ progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *info) * @param c configuration */ static void -run (void *cls, char *const *args, const char *cfgfile, +run (void *cls, + char *const *args, + const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *c) { struct GNUNET_FS_Uri *uri; @@ -230,41 +241,55 @@ run (void *cls, char *const *args, const char *cfgfile, if (NULL == args[0]) { - FPRINTF (stderr, "%s", _("You need to specify a URI argument.\n")); + FPRINTF (stderr, + "%s", + _("You need to specify a URI argument.\n")); return; } uri = GNUNET_FS_uri_parse (args[0], &emsg); if (NULL == uri) { - FPRINTF (stderr, _("Failed to parse URI: %s\n"), emsg); + FPRINTF (stderr, + _("Failed to parse URI: %s\n"), + emsg); GNUNET_free (emsg); ret = 1; return; } - if ((!GNUNET_FS_uri_test_chk (uri)) && (!GNUNET_FS_uri_test_loc (uri))) + if ( (! GNUNET_FS_uri_test_chk (uri)) && + (! GNUNET_FS_uri_test_loc (uri))) { - FPRINTF (stderr, "%s", _("Only CHK or LOC URIs supported.\n")); + FPRINTF (stderr, + "%s", + _("Only CHK or LOC URIs supported.\n")); ret = 1; GNUNET_FS_uri_destroy (uri); return; } if (NULL == filename) { - FPRINTF (stderr, "%s", _("Target filename must be specified.\n")); + FPRINTF (stderr, + "%s", + _("Target filename must be specified.\n")); ret = 1; GNUNET_FS_uri_destroy (uri); return; } cfg = c; - ctx = - GNUNET_FS_start (cfg, "gnunet-download", &progress_cb, NULL, - GNUNET_FS_FLAGS_NONE, - GNUNET_FS_OPTIONS_DOWNLOAD_PARALLELISM, parallelism, - GNUNET_FS_OPTIONS_REQUEST_PARALLELISM, - request_parallelism, GNUNET_FS_OPTIONS_END); + ctx = GNUNET_FS_start (cfg, + "gnunet-download", + &progress_cb, NULL, + GNUNET_FS_FLAGS_NONE, + GNUNET_FS_OPTIONS_DOWNLOAD_PARALLELISM, + parallelism, + GNUNET_FS_OPTIONS_REQUEST_PARALLELISM, + request_parallelism, + GNUNET_FS_OPTIONS_END); if (NULL == ctx) { - FPRINTF (stderr, _("Could not initialize `%s' subsystem.\n"), "FS"); + FPRINTF (stderr, + _("Could not initialize `%s' subsystem.\n"), + "FS"); GNUNET_FS_uri_destroy (uri); ret = 1; return; @@ -274,9 +299,17 @@ run (void *cls, char *const *args, const char *cfgfile, options |= GNUNET_FS_DOWNLOAD_OPTION_RECURSIVE; if (local_only) options |= GNUNET_FS_DOWNLOAD_OPTION_LOOPBACK_ONLY; - dc = GNUNET_FS_download_start (ctx, uri, NULL, filename, NULL, 0, + dc = GNUNET_FS_download_start (ctx, + uri, + NULL, + filename, + NULL, + 0, GNUNET_FS_uri_chk_get_file_size (uri), - anonymity, options, NULL, NULL); + anonymity, + options, + NULL, + NULL); GNUNET_FS_uri_destroy (uri); if (dc == NULL) { @@ -301,60 +334,58 @@ main (int argc, char *const *argv) { struct GNUNET_GETOPT_CommandLineOption options[] = { GNUNET_GETOPT_option_uint ('a', - "anonymity", - "LEVEL", - gettext_noop ("set the desired LEVEL of receiver-anonymity"), - &anonymity), + "anonymity", + "LEVEL", + gettext_noop ("set the desired LEVEL of receiver-anonymity"), + &anonymity), GNUNET_GETOPT_option_flag ('D', - "delete-incomplete", - gettext_noop ("delete incomplete downloads (when aborted with CTRL-C)"), - &delete_incomplete), + "delete-incomplete", + gettext_noop ("delete incomplete downloads (when aborted with CTRL-C)"), + &delete_incomplete), GNUNET_GETOPT_option_flag ('n', - "no-network", - gettext_noop ("only search the local peer (no P2P network search)"), - &local_only), - + "no-network", + gettext_noop ("only search the local peer (no P2P network search)"), + &local_only), GNUNET_GETOPT_option_string ('o', "output", "FILENAME", gettext_noop ("write the file to FILENAME"), &filename), - GNUNET_GETOPT_option_uint ('p', - "parallelism", - "DOWNLOADS", - gettext_noop ("set the maximum number of parallel downloads that is allowed"), - ¶llelism), - + "parallelism", + "DOWNLOADS", + gettext_noop ("set the maximum number of parallel downloads that is allowed"), + ¶llelism), GNUNET_GETOPT_option_uint ('r', - "request-parallelism", - "REQUESTS", - gettext_noop ("set the maximum number of parallel requests for blocks that is allowed"), - &request_parallelism), - + "request-parallelism", + "REQUESTS", + gettext_noop ("set the maximum number of parallel requests for blocks that is allowed"), + &request_parallelism), GNUNET_GETOPT_option_flag ('R', - "recursive", - gettext_noop ("download a GNUnet directory recursively"), - &do_recursive), - + "recursive", + gettext_noop ("download a GNUnet directory recursively"), + &do_recursive), GNUNET_GETOPT_option_increment_uint ('V', - "verbose", - gettext_noop ("be verbose (print progress information)"), - &verbose), - + "verbose", + gettext_noop ("be verbose (print progress information)"), + &verbose), GNUNET_GETOPT_OPTION_END }; - if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv)) + if (GNUNET_OK != + GNUNET_STRINGS_get_utf8_args (argc, argv, + &argc, &argv)) return 2; ret = (GNUNET_OK == - GNUNET_PROGRAM_run (argc, argv, "gnunet-download [OPTIONS] URI", + GNUNET_PROGRAM_run (argc, argv, + "gnunet-download [OPTIONS] URI", gettext_noop ("Download files from GNUnet using a GNUnet CHK or LOC URI (gnunet://fs/chk/...)"), - options, &run, NULL)) ? ret : 1; + options, + &run, NULL)) ? ret : 1; GNUNET_free ((void*) argv); return ret; } diff --git a/src/regex/regex_test_lib.c b/src/regex/regex_test_lib.c index 4e388a70b..814380246 100644 --- a/src/regex/regex_test_lib.c +++ b/src/regex/regex_test_lib.c @@ -99,8 +99,7 @@ c2i (char c, int size) static void space (int n) { - int i; - for (i = 0; i < n; i++) + for (int i = 0; i < n; i++) fprintf (stderr, "| "); } @@ -114,8 +113,7 @@ space (int n) static void debugctx (struct RegexCombineCtx *ctx, int level) { - return; - unsigned int i; +#if DEBUG_REGEX if (NULL != ctx->s) { space (level - 1); @@ -123,7 +121,7 @@ debugctx (struct RegexCombineCtx *ctx, int level) } else fprintf (stderr, "ROOT (base %u)\n", ctx->size); - for (i = 0; i < ctx->size; i++) + for (unsigned int i = 0; i < ctx->size; i++) { if (NULL != ctx->children[i]) { @@ -132,6 +130,7 @@ debugctx (struct RegexCombineCtx *ctx, int level) } } fflush(stderr); +#endif } @@ -142,7 +141,8 @@ debugctx (struct RegexCombineCtx *ctx, int level) * @param regex Regex to add. */ static void -regex_add (struct RegexCombineCtx *ctx, const char *regex); +regex_add (struct RegexCombineCtx *ctx, + const char *regex); /** diff --git a/src/transport/plugin_transport_tcp.c b/src/transport/plugin_transport_tcp.c index 5b78dc970..c5d6e6d34 100644 --- a/src/transport/plugin_transport_tcp.c +++ b/src/transport/plugin_transport_tcp.c @@ -3172,8 +3172,6 @@ handle_tcp_welcome (void *cls, sizeof(struct GNUNET_PeerIdentity))) { /* refuse connections from ourselves */ - GNUNET_SERVER_receive_done (client, - GNUNET_SYSERR); if (GNUNET_OK == GNUNET_SERVER_client_get_address (client, &vaddr, @@ -3185,6 +3183,8 @@ handle_tcp_welcome (void *cls, GNUNET_a2s (vaddr, alen)); GNUNET_free (vaddr); } + GNUNET_SERVER_receive_done (client, + GNUNET_SYSERR); return; } -- 2.25.1