commit 56b61d18311998210f07c3d4b4f21a497bc04d48
Author: Nick Mathewson <nickm(a)torproject.org>
Date: Wed Dec 14 08:05:22 2016 -0500
Add more tweaks from teor's http fuzzing code.
Move option-manipulation code to fuzzing_common.
---
src/test/fuzz/fuzz_http.c | 76 +++++++++++++++++++++++++++++-------------
src/test/fuzz/fuzzing_common.c | 14 ++++++++
2 files changed, 67 insertions(+), 23 deletions(-)
diff --git a/src/test/fuzz/fuzz_http.c b/src/test/fuzz/fuzz_http.c
index ea63e83..15d3726 100644
--- a/src/test/fuzz/fuzz_http.c
+++ b/src/test/fuzz/fuzz_http.c
@@ -16,51 +16,81 @@
#include "fuzzing.h"
-static int mock_get_options_calls = 0;
-static or_options_t *mock_options = NULL;
-
static void
-reset_options(or_options_t *options, int *get_options_calls)
+mock_connection_write_to_buf_impl_(const char *string, size_t len,
+ connection_t *conn, int zlib)
{
- memset(options, 0, sizeof(or_options_t));
- options->TestingTorNetwork = 1;
-
- *get_options_calls = 0;
+ log_debug(LD_GENERAL, "%sResponse:\n%zu\nConnection: %p\n%s\n",
+ zlib ? "Compressed " : "", len, conn, string);
}
-static const or_options_t*
-mock_get_options(void)
+static int
+mock_directory_handle_command_get(dir_connection_t *conn,
+ const char *headers,
+ const char *body,
+ size_t body_len)
{
- ++mock_get_options_calls;
- tor_assert(mock_options);
- return mock_options;
+ (void)conn;
+
+ log_debug(LD_GENERAL, "Method:\nGET\n");
+
+ if (headers) {
+ log_debug(LD_GENERAL, "Header-Length:\n%zu\n", strlen(headers));
+ log_debug(LD_GENERAL, "Headers:\n%s\n", headers);
+
+ }
+
+ log_debug(LD_GENERAL, "Body-Length:\n%zu\n", body_len);
+ if (body) {
+ log_debug(LD_GENERAL, "Body:\n%s\n", body);
+ }
+
+ /* Always tell the caller we succeeded */
+ return 0;
}
-static void
-mock_connection_write_to_buf_impl_(const char *string, size_t len,
- connection_t *conn, int zlib)
+static int
+mock_directory_handle_command_post(dir_connection_t *conn,
+ const char *headers,
+ const char *body,
+ size_t body_len)
{
- log_debug(LD_GENERAL, "%sResponse:\n%zu\nConnection: %p\n%s\n",
- zlib ? "Compressed " : "", len, conn, string);
+ (void)conn;
+
+ log_debug(LD_GENERAL, "Method:\nPOST\n");
+
+ if (headers) {
+ log_debug(LD_GENERAL, "Header-Length:\n%zu\n", strlen(headers));
+ log_debug(LD_GENERAL, "Headers:\n%s\n", headers);
+ }
+
+ log_debug(LD_GENERAL, "Body-Length:\n%zu\n", body_len);
+ if (body) {
+ log_debug(LD_GENERAL, "Body:\n%s\n", body);
+ }
+
+ /* Always tell the caller we succeeded */
+ return 0;
}
int
fuzz_init(void)
{
- mock_options = tor_malloc(sizeof(or_options_t));
- reset_options(mock_options, &mock_get_options_calls);
- MOCK(get_options, mock_get_options);
/* Set up fake response handler */
MOCK(connection_write_to_buf_impl_, mock_connection_write_to_buf_impl_);
+ /* Set up the fake handler functions */
+ MOCK(directory_handle_command_get, mock_directory_handle_command_get);
+ MOCK(directory_handle_command_post, mock_directory_handle_command_post);
+
return 0;
}
int
fuzz_cleanup(void)
{
- tor_free(mock_options);
- UNMOCK(get_options);
UNMOCK(connection_write_to_buf_impl_);
+ UNMOCK(directory_handle_command_get);
+ UNMOCK(directory_handle_command_post);
return 0;
}
diff --git a/src/test/fuzz/fuzzing_common.c b/src/test/fuzz/fuzzing_common.c
index f2570a1..54a7923 100644
--- a/src/test/fuzz/fuzzing_common.c
+++ b/src/test/fuzz/fuzzing_common.c
@@ -10,6 +10,13 @@
extern const char tor_git_revision[];
const char tor_git_revision[] = "";
+static or_options_t *mock_options = NULL;
+static const or_options_t *
+mock_get_options(void)
+{
+ return mock_options;
+}
+
static int
mock_crypto_pk_public_checksig__nocheck(const crypto_pk_t *env, char *to,
size_t tolen,
@@ -116,6 +123,10 @@ main(int argc, char **argv)
init_logging(1);
configure_backtrace_handler(get_version());
+ /* set up the options. */
+ mock_options = tor_malloc(sizeof(or_options_t));
+ MOCK(get_options, mock_get_options);
+
for (int i = 1; i < argc; ++i) {
if (!strcmp(argv[i], "--warn")) {
loglevel = LOG_WARN;
@@ -156,6 +167,9 @@ main(int argc, char **argv)
if (fuzz_cleanup() < 0)
abort();
+
+ tor_free(mock_options);
+ UNMOCK(get_options);
return 0;
}