From 1e56dc9642b945441f16f678f59ba8143444e7a8 Mon Sep 17 00:00:00 2001 From: Andy Green Date: Fri, 17 Sep 2021 09:11:08 +0100 Subject: [PATCH] ss: http: defend against CONNECTED-CONNECTED --- lib/secure-streams/protocols/ss-h1.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/lib/secure-streams/protocols/ss-h1.c b/lib/secure-streams/protocols/ss-h1.c index ee294dd8b..0877c5a8f 100644 --- a/lib/secure-streams/protocols/ss-h1.c +++ b/lib/secure-streams/protocols/ss-h1.c @@ -650,9 +650,11 @@ secstream_h1(struct lws *wsi, enum lws_callback_reasons reason, void *user, if (h->prev_ss_state != LWSSSCS_CONNECTED) { wsi->client_suppress_CONNECTION_ERROR = 1; - r = lws_ss_event_helper(h, LWSSSCS_CONNECTED); - if (r != LWSSSSRET_OK) - return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); + if (h->prev_ss_state != LWSSSCS_CONNECTED) { + r = lws_ss_event_helper(h, LWSSSCS_CONNECTED); + if (r != LWSSSSRET_OK) + return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); + } } /* @@ -829,9 +831,11 @@ malformed: !strcmp(h->policy->u.http.method, "POST"))) { wsi->client_suppress_CONNECTION_ERROR = 1; - r = lws_ss_event_helper(h, LWSSSCS_CONNECTED); - if (r) - return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); + if (h->prev_ss_state != LWSSSCS_CONNECTED) { + r = lws_ss_event_helper(h, LWSSSCS_CONNECTED); + if (r) + return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); + } } break; @@ -1100,9 +1104,11 @@ malformed: lws_metrics_caliper_report_hist(h->cal_txn, (struct lws *)NULL); #endif wsi->client_suppress_CONNECTION_ERROR = 1; - r = lws_ss_event_helper(h, LWSSSCS_CONNECTED); - if (r) - return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); + if (h->prev_ss_state != LWSSSCS_CONNECTED) { + r = lws_ss_event_helper(h, LWSSSCS_CONNECTED); + if (r) + return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); + } } r = lws_ss_event_helper(h, LWSSSCS_SERVER_TXN);