mirror of
https://github.com/warmcat/libwebsockets.git
synced 2025-03-09 00:00:04 +01:00
ss: policy: unwind after policy syntax errors cleanly
This commit is contained in:
parent
8c7d541011
commit
ad990a61a0
5 changed files with 21 additions and 7 deletions
|
@ -107,7 +107,7 @@ void
|
|||
lejp_destruct(struct lejp_ctx *ctx)
|
||||
{
|
||||
/* no allocations... just let callback know what it happening */
|
||||
if (ctx->pst[0].callback)
|
||||
if (ctx && ctx->pst[0].callback)
|
||||
ctx->pst[0].callback(ctx, LEJPCB_DESTRUCTED);
|
||||
}
|
||||
|
||||
|
|
|
@ -420,6 +420,9 @@ lws_ss_policy_set(struct lws_context *context, const char *name)
|
|||
* policy that's laid out in args->ac
|
||||
*/
|
||||
|
||||
if (!args)
|
||||
return 1;
|
||||
|
||||
lejp_destruct(&args->jctx);
|
||||
|
||||
if (context->ac_policy) {
|
||||
|
|
|
@ -1152,10 +1152,16 @@ lws_ss_policy_parse_abandon(struct lws_context *context)
|
|||
* Free all the client DER buffers now they have been parsed
|
||||
* into tls library X.509 objects
|
||||
*/
|
||||
if (!x->keep) { /* used for server */
|
||||
lws_free((void *)x->ca_der);
|
||||
x->ca_der = NULL;
|
||||
}
|
||||
lws_free((void *)x->ca_der);
|
||||
x->ca_der = NULL;
|
||||
|
||||
x = x->next;
|
||||
}
|
||||
|
||||
x = context->server_der_list;
|
||||
while (x) {
|
||||
lws_free((void *)x->ca_der);
|
||||
x->ca_der = NULL;
|
||||
|
||||
x = x->next;
|
||||
}
|
||||
|
@ -1164,6 +1170,8 @@ lws_ss_policy_parse_abandon(struct lws_context *context)
|
|||
lwsac_free(&args->ac);
|
||||
lws_free_set_NULL(context->pol_args);
|
||||
|
||||
context->server_der_list = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1052,7 +1052,7 @@ malformed:
|
|||
if (!h)
|
||||
return -1;
|
||||
|
||||
lwsl_notice("%s: LWS_CALLBACK_HTTP\n", __func__);
|
||||
lwsl_info("%s: LWS_CALLBACK_HTTP\n", __func__);
|
||||
{
|
||||
|
||||
h->txn_resp_set = 0;
|
||||
|
@ -1113,7 +1113,9 @@ malformed:
|
|||
|
||||
r = lws_ss_event_helper(h, LWSSSCS_SERVER_TXN);
|
||||
if (r)
|
||||
return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h);
|
||||
return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r,
|
||||
wsi, &h);
|
||||
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
|
|
|
@ -293,6 +293,7 @@ lws_ss_check_next_state(lws_lifecycle_t *lc, uint8_t *prevstate,
|
|||
{
|
||||
if (cs >= LWSSSCS_USER_BASE ||
|
||||
cs == LWSSSCS_EVENT_WAIT_CANCELLED ||
|
||||
cs == LWSSSCS_SERVER_TXN ||
|
||||
cs == LWSSSCS_UPSTREAM_LINK_RETRY)
|
||||
/*
|
||||
* we can't judge user or transient states, leave the old state
|
||||
|
|
Loading…
Add table
Reference in a new issue