From f2fe47e9f75ae8d43b37235114bb0f59a4d02c3c Mon Sep 17 00:00:00 2001 From: "Sergio R. Caprile" Date: Fri, 11 Apr 2025 14:42:15 -0300 Subject: [PATCH] workaround causing TLS libs to return zero --- mongoose.c | 2 ++ src/tls_mbed.c | 1 + src/tls_openssl.c | 1 + 3 files changed, 4 insertions(+) diff --git a/mongoose.c b/mongoose.c index 936828b4..f4130f23 100644 --- a/mongoose.c +++ b/mongoose.c @@ -13619,6 +13619,7 @@ size_t mg_tls_pending(struct mg_connection *c) { long mg_tls_recv(struct mg_connection *c, void *buf, size_t len) { struct mg_tls *tls = (struct mg_tls *) c->tls; long n = mbedtls_ssl_read(&tls->ssl, (unsigned char *) buf, len); + if (!c->is_tls_hs && buf == NULL && n == 0) return 0; // TODO(): MIP if (n == MBEDTLS_ERR_SSL_WANT_READ || n == MBEDTLS_ERR_SSL_WANT_WRITE) return MG_IO_WAIT; #if defined(MBEDTLS_ERR_SSL_RECEIVED_NEW_SESSION_TICKET) @@ -13937,6 +13938,7 @@ size_t mg_tls_pending(struct mg_connection *c) { long mg_tls_recv(struct mg_connection *c, void *buf, size_t len) { struct mg_tls *tls = (struct mg_tls *) c->tls; int n = SSL_read(tls->ssl, buf, (int) len); + if (!c->is_tls_hs && buf == NULL && n == 0) return 0; // TODO(): MIP if (n < 0 && mg_tls_err(c, tls, n) == 0) return MG_IO_WAIT; if (n <= 0) return MG_IO_ERR; return n; diff --git a/src/tls_mbed.c b/src/tls_mbed.c index 187b4b1a..afcb0432 100644 --- a/src/tls_mbed.c +++ b/src/tls_mbed.c @@ -177,6 +177,7 @@ size_t mg_tls_pending(struct mg_connection *c) { long mg_tls_recv(struct mg_connection *c, void *buf, size_t len) { struct mg_tls *tls = (struct mg_tls *) c->tls; long n = mbedtls_ssl_read(&tls->ssl, (unsigned char *) buf, len); + if (!c->is_tls_hs && buf == NULL && n == 0) return 0; // TODO(): MIP if (n == MBEDTLS_ERR_SSL_WANT_READ || n == MBEDTLS_ERR_SSL_WANT_WRITE) return MG_IO_WAIT; #if defined(MBEDTLS_ERR_SSL_RECEIVED_NEW_SESSION_TICKET) diff --git a/src/tls_openssl.c b/src/tls_openssl.c index 58d45c31..d2382543 100644 --- a/src/tls_openssl.c +++ b/src/tls_openssl.c @@ -256,6 +256,7 @@ size_t mg_tls_pending(struct mg_connection *c) { long mg_tls_recv(struct mg_connection *c, void *buf, size_t len) { struct mg_tls *tls = (struct mg_tls *) c->tls; int n = SSL_read(tls->ssl, buf, (int) len); + if (!c->is_tls_hs && buf == NULL && n == 0) return 0; // TODO(): MIP if (n < 0 && mg_tls_err(c, tls, n) == 0) return MG_IO_WAIT; if (n <= 0) return MG_IO_ERR; return n;