Skip to content

Commit 10735d6

Browse files
committed
fixes
1 parent 71cc256 commit 10735d6

11 files changed

Lines changed: 41 additions & 14 deletions

File tree

include/libwebsockets/lws-context-vhost.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1112,7 +1112,9 @@ struct lws_context_creation_info {
11121112
/**< VHOST: Comma-separated list of IPv4 and/or IPv6 preferred addresses (e.g., "1.2.3.4:443,[2001:db8::1]:443")
11131113
* to send to the client during the handshake to facilitate Connection Migration. */
11141114

1115+
#if !defined(__STRICT_ANSI__)
11151116
void *_unused[0]; /**< dummy */
1117+
#endif
11161118
};
11171119

11181120
/**

include/libwebsockets/lws-lecp.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,7 @@ struct lecp_ctx {
290290
uint8_t pst_sp; /* parsing stack head */
291291
uint8_t outer_array;
292292
uint8_t cbor_pos;
293+
uint8_t cbor_len;
293294
uint8_t literal_cbor_report;
294295
char present; /* temp for cb reason to use */
295296

lib/cose/cose_sign.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -456,11 +456,10 @@ lws_cose_sign_payload_chunk(struct lws_cose_sign_context *csc,
456456
lws_lec_printf(&lec, "{1:%lld}",
457457
(long long)csc->alg->cose_alg);
458458

459-
lws_lec_init(&lec1, lb, sizeof(lb));
460-
lws_lec_int(&lec1, LWS_CBOR_MAJTYP_BSTR, 0,
461-
lec.used);
462-
if (lws_lec_printf(csc->info.lec, "{1:%lld}",
463-
(long long)csc->alg->cose_alg) != LWS_LECPCTX_RET_FINISHED)
459+
lws_lec_scratch(&lec);
460+
461+
if (lws_lec_printf(csc->info.lec, "%.*b",
462+
(int)lec.used, lec.start) != LWS_LECPCTX_RET_FINISHED)
464463
/* coverity */
465464
return 0;
466465
break;

lib/cose/cose_validate.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -947,13 +947,13 @@ cb_cose_sig(struct lecp_ctx *ctx, char reason)
947947
case ST_OUTER_UNPROTECTED:
948948
sl = &cps->st[cps->sp];
949949
hi = ph_index(cps);
950-
if (sl->ph_pos[hi] + 3 + ctx->cbor_pos >
950+
if (sl->ph_pos[hi] + 3 + ctx->cbor_len >
951951
(int)sizeof(sl->ph[hi]) - 3)
952952
/* more protected cbor than we can handle */
953953
goto bail;
954954
memcpy(sl->ph[hi] + 3 + sl->ph_pos[hi], ctx->cbor,
955-
ctx->cbor_pos);
956-
sl->ph_pos[hi] += ctx->cbor_pos;
955+
ctx->cbor_len);
956+
sl->ph_pos[hi] += ctx->cbor_len;
957957
break;
958958
}
959959
}

lib/misc/lecp.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,7 @@ report_raw_cbor(struct lecp_ctx *ctx)
325325
if (!ctx->cbor_pos)
326326
return 0;
327327

328+
ctx->cbor_len = ctx->cbor_pos;
328329
ctx->cbor_pos = 0; /* reset BEFORE callback */
329330

330331
if (pst->cb(ctx, LECPCB_LITERAL_CBOR))

lib/roles/quic/ops-quic.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -841,16 +841,22 @@ rops_handle_POLLIN_quic(struct lws_context_per_thread *pt, struct lws *wsi,
841841
if (sa.sa4.sin_family == AF_INET) {
842842
sa4 = sa;
843843
sa4.sa4.sin_port = htons((uint16_t)port);
844+
#if defined(LWS_WITH_IPV6)
844845
} else {
845846
sa6 = sa;
846847
sa6.sa6.sin6_port = htons((uint16_t)port);
848+
#endif
847849
}
848850
}
849851
p = comma ? comma + 1 : NULL;
850852
}
851853

852854
/* We only send preferred_address if we have a valid address */
855+
#if defined(LWS_WITH_IPV6)
853856
if (sa4.sa4.sin_family == AF_INET || sa6.sa6.sin6_family == AF_INET6) {
857+
#else
858+
if (sa4.sa4.sin_family == AF_INET) {
859+
#endif
854860
uint8_t pref_buf[128];
855861
uint8_t *pb = pref_buf;
856862

@@ -863,12 +869,16 @@ rops_handle_POLLIN_quic(struct lws_context_per_thread *pt, struct lws *wsi,
863869
}
864870

865871
/* IPv6 (16 bytes addr, 2 bytes port) */
872+
#if defined(LWS_WITH_IPV6)
866873
if (sa6.sa6.sin6_family == AF_INET6) {
867874
memcpy(pb, sa6.sa6.sin6_addr.s6_addr, 16); pb += 16;
868875
memcpy(pb, &sa6.sa6.sin6_port, 2); pb += 2;
869876
} else {
870877
memset(pb, 0, 18); pb += 18;
871878
}
879+
#else
880+
memset(pb, 0, 18); pb += 18;
881+
#endif
872882

873883
/* CID Length (1 byte) */
874884
*pb++ = 8; /* Generating an 8-byte CID */

lib/roles/quic/parse-quic.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -568,6 +568,11 @@ lws_quic_parse_frames(struct lws *nwsi, int level, uint8_t *payload, size_t payl
568568
pn -= (first_ack_range + 1);
569569

570570
/* 5. Additional ACK Ranges */
571+
if (ack_range_count > (payload_len - pos) / 2) {
572+
lws_quic_enter_closing_state(nwsi, LWS_QUIC_ERR_FRAME_ENCODING_ERROR, type, 0);
573+
return -1;
574+
}
575+
571576
for (uint64_t r = 0; r < ack_range_count; r++) {
572577
uint64_t gap, ack_range;
573578

@@ -885,8 +890,10 @@ lws_quic_parse_frames(struct lws *nwsi, int level, uint8_t *payload, size_t payl
885890
/* Transition new nwsi to established state and cancel its timeout/grace timers */
886891
lwsi_set_state(nwsi, LRS_ESTABLISHED);
887892
lws_set_timeout(nwsi, NO_PENDING_TIMEOUT, 0);
893+
#if defined(LWS_WITH_CLIENT)
888894
lws_sul_cancel(&nwsi->sul_h3_grace);
889895
lws_sul_cancel(&nwsi->sul_happy_eyeballs);
896+
#endif
890897
lws_sul_cancel(&nwsi->sul_connect_timeout);
891898

892899
/* Reparent all child streams to the new nwsi */

lib/tls/gnutls/gnutls-session.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,10 +194,12 @@ lws_tls_session_new_gnutls(struct lws *wsi)
194194

195195
nl = strlen(buf);
196196

197+
#if (_LWS_ENABLED_LOGS & LLL_NOTICE)
197198
/* Check if a session ticket has actually been received (TLS 1.3 requirement) */
198199
unsigned sess_flags = gnutls_session_get_flags((gnutls_session_t)wsi->tls.ssl);
199200
lwsl_notice("%s: QUIC session ticket check: flags=0x%x, has_ticket=%d\n", __func__,
200201
sess_flags, !!(sess_flags & GNUTLS_SFLAGS_SESSION_TICKET));
202+
#endif
201203

202204
int ret = gnutls_session_get_data2((gnutls_session_t)wsi->tls.ssl, &gd);
203205
lwsl_notice("%s: gnutls_session_get_data2 ret=%d, len=%u\n", __func__, ret, gd.size);

lib/tls/gnutls/gnutls-tls.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -336,10 +336,15 @@ int
336336
lws_tls_server_new_nonblocking(struct lws *wsi, lws_sockfd_type accept_fd)
337337
{
338338
gnutls_session_t session;
339-
340339
unsigned int flags = GNUTLS_SERVER;
340+
341+
if (!wsi->a.vhost) {
342+
lwsl_err("%s: NULL vhost\n", __func__);
343+
return 1;
344+
}
345+
341346
#if GNUTLS_VERSION_NUMBER >= 0x030605
342-
if (wsi->a.vhost && (wsi->a.vhost->options & LWS_SERVER_OPTION_ALLOW_EARLY_DATA)) {
347+
if (wsi->a.vhost->options & LWS_SERVER_OPTION_ALLOW_EARLY_DATA) {
343348
flags |= GNUTLS_ENABLE_EARLY_DATA;
344349
#if defined(LWS_ROLE_QUIC) && GNUTLS_VERSION_NUMBER >= 0x030702
345350
extern const struct lws_role_ops role_ops_quic;
@@ -493,7 +498,7 @@ lws_ssl_client_bio_create(struct lws *wsi)
493498
void
494499
lws_ssl_SSL_CTX_destroy(struct lws_vhost *vhost)
495500
{
496-
#if GNUTLS_VERSION_NUMBER >= 0x030605
501+
#if defined(LWS_WITH_SERVER) && GNUTLS_VERSION_NUMBER >= 0x030605
497502
if (vhost->tls.anti_replay) {
498503
lws_dll2_owner_t *owner = (lws_dll2_owner_t *)vhost->tls.anti_replay_owner;
499504
if (owner) {

minimal-examples-lowlevel/http-client/minimal-http-client-multi/minimal-http-client-multi.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -749,10 +749,10 @@ int main(int argc, const char **argv)
749749
*/
750750
if (testcase && !strcmp(testcase, "zerortt")) {
751751
if (!save_ticket[0])
752-
lws_strncpy(save_ticket, "/tmp/lws_session_ticket",
752+
lws_strncpy(save_ticket, "./lws_session_ticket",
753753
sizeof(save_ticket));
754754
if (!load_ticket[0])
755-
lws_strncpy(load_ticket, "/tmp/lws_session_ticket",
755+
lws_strncpy(load_ticket, "./lws_session_ticket",
756756
sizeof(load_ticket));
757757
lwsl_notice("%s: TESTCASE=zerortt: ticket path '%s'\n",
758758
__func__, save_ticket);

0 commit comments

Comments
 (0)