diff options
-rw-r--r-- | demos/sslecho/main.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/demos/sslecho/main.c b/demos/sslecho/main.c index c6f087c56f..588158e749 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"); |