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;
|
return;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
evrpc_reqstate_free_(rpc_state);
|
if (rpc_state)
|
||||||
|
evrpc_reqstate_free_(rpc_state);
|
||||||
evhttp_send_error(req, HTTP_SERVUNAVAIL, NULL);
|
evhttp_send_error(req, HTTP_SERVUNAVAIL, NULL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -879,6 +879,53 @@ end:
|
|||||||
evbuffer_free(tmp);
|
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) \
|
#define RPC_LEGACY(name) \
|
||||||
{ #name, run_legacy_test_fn, TT_FORK|TT_NEED_BASE|TT_LEGACY, \
|
{ #name, run_legacy_test_fn, TT_FORK|TT_NEED_BASE|TT_LEGACY, \
|
||||||
&legacy_setup, \
|
&legacy_setup, \
|
||||||
@ -897,6 +944,7 @@ struct testcase_t rpc_testcases[] = {
|
|||||||
RPC_LEGACY(basic_client),
|
RPC_LEGACY(basic_client),
|
||||||
RPC_LEGACY(basic_queued_client),
|
RPC_LEGACY(basic_queued_client),
|
||||||
RPC_LEGACY(basic_client_with_pause),
|
RPC_LEGACY(basic_client_with_pause),
|
||||||
|
RPC_LEGACY(invalid_type),
|
||||||
RPC_LEGACY(client_timeout),
|
RPC_LEGACY(client_timeout),
|
||||||
RPC_LEGACY(test),
|
RPC_LEGACY(test),
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user