Skip to content

Commit

Permalink
evrpc: avoid NULL dereference on request is not EVHTTP_REQ_POST
Browse files Browse the repository at this point in the history
  • Loading branch information
azat committed Sep 13, 2018
1 parent 7af974e commit 8483c53
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 1 deletion.
3 changes: 2 additions & 1 deletion evrpc.c
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,8 @@ evrpc_request_cb(struct evhttp_request *req, void *arg)
return;

error:
evrpc_reqstate_free_(rpc_state);
if (rpc_state)
evrpc_reqstate_free_(rpc_state);
evhttp_send_error(req, HTTP_SERVUNAVAIL, NULL);
return;
}
Expand Down
48 changes: 48 additions & 0 deletions test/regress_rpc.c
Original file line number Diff line number Diff line change
Expand Up @@ -879,6 +879,53 @@ rpc_test(void)
evbuffer_free(tmp);
}

static void
rpc_invalid_type(void)
{
ev_uint16_t port;
struct evhttp *http = NULL;
struct evrpc_base *base = NULL;
struct evhttp_connection *evcon = NULL;
struct evhttp_request *req = NULL;

rpc_setup(&http, &port, &base);

evcon = evhttp_connection_new("127.0.0.1", port);
tt_assert(evcon);

/*
* At this point, we want to schedule an HTTP POST request
* server using our make request method.
*/

req = evhttp_request_new(rpc_postrequest_failure, NULL);
tt_assert(req);

/* Add the information that we care about */
evhttp_add_header(req->output_headers, "Host", "somehost");
evbuffer_add_printf(req->output_buffer, "Some Nonsense");

if (evhttp_make_request(evcon, req,
EVHTTP_REQ_GET,
"/.rpc.Message") == -1) {
tt_abort();
}

test_ok = 0;

event_dispatch();

evhttp_connection_free(evcon);

rpc_teardown(base);

tt_assert(test_ok == 1);

end:
evhttp_free(http);
}


#define RPC_LEGACY(name) \
{ #name, run_legacy_test_fn, TT_FORK|TT_NEED_BASE|TT_LEGACY, \
&legacy_setup, \
Expand All @@ -897,6 +944,7 @@ struct testcase_t rpc_testcases[] = {
RPC_LEGACY(basic_client),
RPC_LEGACY(basic_queued_client),
RPC_LEGACY(basic_client_with_pause),
RPC_LEGACY(invalid_type),
RPC_LEGACY(client_timeout),
RPC_LEGACY(test),

Expand Down

0 comments on commit 8483c53

Please sign in to comment.