Bladeren bron

Small hack to avoid runtime error when using ubsan

mbedtls_ssl_read cannot be called with a NULL buffer even if len is 0,
as those are passed to memcpy and compilers doesn't like that.
Always pass a single byte (still len 0 so nothing is actually copied)
Fabio Alessandrelli 6 jaren geleden
bovenliggende
commit
2b8b738391
1 gewijzigde bestanden met toevoegingen van 4 en 1 verwijderingen
  1. 4 1
      modules/mbedtls/stream_peer_mbed_tls.cpp

+ 4 - 1
modules/mbedtls/stream_peer_mbed_tls.cpp

@@ -270,7 +270,10 @@ void StreamPeerMbedTLS::poll() {
 		return;
 	}
 
-	int ret = mbedtls_ssl_read(&ssl, NULL, 0);
+	// We could pass NULL as second parameter, but some behaviour sanitizers doesn't seem to like that.
+	// Passing a 1 byte buffer to workaround it.
+	uint8_t byte;
+	int ret = mbedtls_ssl_read(&ssl, &byte, 0);
 
 	if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) {
 		// Nothing to read/write (non blocking IO)