mirror of
https://github.com/libevent/libevent.git
synced 2025-01-31 09:12:55 +08:00
evrpc: avoid NULL dereference on request is not EVHTTP_REQ_POST
Fixes: #660
This commit is contained in:
parent
7af974eeaa
commit
8483c5351a
3
evrpc.c
3
evrpc.c
@ -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;
|
||||
}
|
||||
|
@ -879,6 +879,53 @@ end:
|
||||
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, \
|
||||
@ -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),
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user