From: philippe lhardy Date: Mon, 25 Apr 2022 17:42:16 +0000 (+0200) Subject: fix for sslecho in demos echoing garbage #18165 X-Git-Tag: openssl-3.2.0-alpha1~2697 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c0e8bc4a797d29b2152aebc6e687ddfa941160b;p=thirdparty%2Fopenssl.git fix for sslecho in demos echoing garbage #18165 - getline does set &txbufp content at return, make sure it can be done. - fixes warning 'passing argument 1 of ‘getline’ from incompatible pointer type' - remove OPENSSL_free on non allocated fixed size array - fixes 'free(): invalid pointer' Reviewed-by: Tomas Mraz Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/18177) --- diff --git a/demos/sslecho/main.c b/demos/sslecho/main.c index c6f087c56fa..588158e749e 100644 --- a/demos/sslecho/main.c +++ b/demos/sslecho/main.c @@ -137,8 +137,9 @@ int main(int argc, char **argv) int server_skt = -1; int client_skt = -1; - char txbuf[128]; - size_t txcap = sizeof(txbuf); + /* used by getline relying on realloc, can't be statically allocated */ + char *txbuf = NULL; + size_t txcap = 0; int txlen; char rxbuf[128]; @@ -286,11 +287,14 @@ int main(int argc, char **argv) while (true) { /* Get a line of input */ txlen = getline(&txbuf, &txcap, stdin); + /* Exit loop on error */ + if (txlen < 0 || txbuf == NULL) { + break; + } /* Exit loop if just a carriage return */ if (txbuf[0] == '\n') { break; } - /* Send it to the server */ if ((result = SSL_write(ssl, txbuf, txlen)) <= 0) { printf("Server closed connection\n"); @@ -331,8 +335,8 @@ int main(int argc, char **argv) if (server_skt != -1) close(server_skt); - OPENSSL_free(txbuf); - OPENSSL_free(rxbuf); + if (txbuf != NULL && txcap > 0) + free(txbuf); printf("sslecho exiting\n");