@@ -134,10 +134,12 @@ evrpc_add_hook(void *vbase,
134
134
break ;
135
135
default :
136
136
EVUTIL_ASSERT (hook_type == EVRPC_INPUT || hook_type == EVRPC_OUTPUT );
137
+ return NULL ;
137
138
}
138
139
139
140
hook = mm_calloc (1 , sizeof (struct evrpc_hook ));
140
- EVUTIL_ASSERT (hook != NULL );
141
+ if (!hook )
142
+ return NULL ;
141
143
142
144
hook -> process = cb ;
143
145
hook -> process_arg = cb_arg ;
@@ -302,7 +304,9 @@ evrpc_request_cb(struct evhttp_request *req, void *arg)
302
304
if (TAILQ_FIRST (& rpc -> base -> input_hooks ) != NULL ) {
303
305
int hook_res ;
304
306
305
- evrpc_hook_associate_meta_ (& rpc_state -> hook_meta , req -> evcon );
307
+ int err = evrpc_hook_associate_meta_ (& rpc_state -> hook_meta , req -> evcon );
308
+ if (err )
309
+ goto error ;
306
310
307
311
/*
308
312
* allow hooks to modify the outgoing request
@@ -427,7 +431,9 @@ evrpc_request_done(struct evrpc_req_generic *rpc_state)
427
431
if (TAILQ_FIRST (& rpc -> base -> output_hooks ) != NULL ) {
428
432
int hook_res ;
429
433
430
- evrpc_hook_associate_meta_ (& rpc_state -> hook_meta , req -> evcon );
434
+ int err = evrpc_hook_associate_meta_ (& rpc_state -> hook_meta , req -> evcon );
435
+ if (err )
436
+ goto error ;
431
437
432
438
/* do hook based tweaks to the request */
433
439
hook_res = evrpc_process_hooks (& rpc -> base -> output_hooks ,
@@ -678,7 +684,9 @@ evrpc_schedule_request(struct evhttp_connection *connection,
678
684
if (TAILQ_FIRST (& pool -> output_hooks ) != NULL ) {
679
685
int hook_res ;
680
686
681
- evrpc_hook_associate_meta_ (& ctx -> hook_meta , connection );
687
+ int err = evrpc_hook_associate_meta_ (& ctx -> hook_meta , connection );
688
+ if (err )
689
+ goto error ;
682
690
683
691
/* apply hooks to the outgoing request */
684
692
hook_res = evrpc_process_hooks (& pool -> output_hooks ,
@@ -875,7 +883,9 @@ evrpc_reply_done(struct evhttp_request *req, void *arg)
875
883
}
876
884
877
885
if (TAILQ_FIRST (& pool -> input_hooks ) != NULL ) {
878
- evrpc_hook_associate_meta_ (& ctx -> hook_meta , ctx -> evcon );
886
+ int err = evrpc_hook_associate_meta_ (& ctx -> hook_meta , ctx -> evcon );
887
+ if (err )
888
+ goto error ;
879
889
880
890
/* apply hooks to the incoming request */
881
891
hook_res = evrpc_process_hooks (& pool -> input_hooks ,
@@ -905,8 +915,11 @@ evrpc_reply_done(struct evhttp_request *req, void *arg)
905
915
}
906
916
907
917
evrpc_reply_done_closure (ctx , hook_res );
908
-
918
+ return ;
909
919
/* http request is being freed by underlying layer */
920
+
921
+ error :
922
+ evrpc_request_wrapper_free (ctx );
910
923
}
911
924
912
925
static void
@@ -984,7 +997,9 @@ static void
984
997
evrpc_meta_data_free (struct evrpc_meta_list * meta_data )
985
998
{
986
999
struct evrpc_meta * entry ;
987
- EVUTIL_ASSERT (meta_data != NULL );
1000
+
1001
+ if (!meta_data )
1002
+ return ;
988
1003
989
1004
while ((entry = TAILQ_FIRST (meta_data )) != NULL ) {
990
1005
TAILQ_REMOVE (meta_data , entry , next );
@@ -999,22 +1014,26 @@ evrpc_hook_meta_new_(void)
999
1014
{
1000
1015
struct evrpc_hook_meta * ctx ;
1001
1016
ctx = mm_malloc (sizeof (struct evrpc_hook_meta ));
1002
- EVUTIL_ASSERT (ctx != NULL );
1017
+ if (!ctx )
1018
+ return NULL ;
1003
1019
1004
1020
TAILQ_INIT (& ctx -> meta_data );
1005
1021
ctx -> evcon = NULL ;
1006
1022
1007
1023
return (ctx );
1008
1024
}
1009
1025
1010
- static void
1026
+ static int
1011
1027
evrpc_hook_associate_meta_ (struct evrpc_hook_meta * * pctx ,
1012
1028
struct evhttp_connection * evcon )
1013
1029
{
1014
1030
struct evrpc_hook_meta * ctx = * pctx ;
1015
1031
if (ctx == NULL )
1016
1032
* pctx = ctx = evrpc_hook_meta_new_ ();
1033
+ if (!ctx )
1034
+ return 1 ;
1017
1035
ctx -> evcon = evcon ;
1036
+ return 0 ;
1018
1037
}
1019
1038
1020
1039
static void
@@ -1025,7 +1044,7 @@ evrpc_hook_context_free_(struct evrpc_hook_meta *ctx)
1025
1044
}
1026
1045
1027
1046
/* Adds meta data */
1028
- void
1047
+ int
1029
1048
evrpc_hook_add_meta (void * ctx , const char * key ,
1030
1049
const void * data , size_t data_size )
1031
1050
{
@@ -1036,16 +1055,32 @@ evrpc_hook_add_meta(void *ctx, const char *key,
1036
1055
if ((store = req -> hook_meta ) == NULL )
1037
1056
store = req -> hook_meta = evrpc_hook_meta_new_ ();
1038
1057
1058
+ if (!store )
1059
+ goto err ;
1060
+
1039
1061
meta = mm_malloc (sizeof (struct evrpc_meta ));
1040
- EVUTIL_ASSERT (meta != NULL );
1062
+ if (!meta )
1063
+ goto err ;
1041
1064
meta -> key = mm_strdup (key );
1042
- EVUTIL_ASSERT (meta -> key != NULL );
1065
+ if (!meta -> key )
1066
+ goto err ;
1043
1067
meta -> data_size = data_size ;
1044
1068
meta -> data = mm_malloc (data_size );
1045
- EVUTIL_ASSERT (meta -> data != NULL );
1069
+ if (!meta -> data )
1070
+ goto err ;
1046
1071
memcpy (meta -> data , data , data_size );
1047
1072
1048
1073
TAILQ_INSERT_TAIL (& store -> meta_data , meta , next );
1074
+ return 0 ;
1075
+
1076
+ err :
1077
+ evrpc_hook_context_free_ (store );
1078
+ if (meta ) {
1079
+ mm_free (meta -> data );
1080
+ mm_free (meta -> key );
1081
+ mm_free (meta );
1082
+ }
1083
+ return 1 ;
1049
1084
}
1050
1085
1051
1086
int
0 commit comments