shithub: tlsclient

Download patch

ref: d76925e3a63f4a275fd0d05f6b1d088fb88a9203
parent: 5667f2e915e89cfda69b3be28b612d59fea1d56b
author: Jacob Moody <moody@posixcafe.org>
date: Thu Sep 7 04:54:46 EDT 2023

use ssize_t for iofunc's (thanks deuteron)

also check for pipe return values

--- a/cpu.c
+++ b/cpu.c
@@ -63,7 +63,8 @@
 {
 	int p[2];
 
-	pipe(p);
+	if(pipe(p) < 0)
+		sysfatal("pipe failed");
 	switch(fork()){
 	case -1:
 		sysfatal("fork");
@@ -87,18 +88,18 @@
 //clean exit signal handler
 void suicide(int num) { exit(0); }
 
-typedef size_t (*iofunc)(int, void*, size_t);
-size_t tls_send(int f, void *b, size_t n) { return SSL_write(ssl_conn, b, n); }
-size_t tls_recv(int f, void *b, size_t n) { return SSL_read(ssl_conn, b, n); }
-size_t s_send(int f, void *b, size_t n) { return write(f, b, n); }
-size_t s_recv(int f, void *b, size_t n) { return read(f, b, n); }
+typedef ssize_t (*iofunc)(int, void*, size_t);
+ssize_t tls_send(int f, void *b, size_t n) { return SSL_write(ssl_conn, b, n); }
+ssize_t tls_recv(int f, void *b, size_t n) { return SSL_read(ssl_conn, b, n); }
+ssize_t s_send(int f, void *b, size_t n) { return write(f, b, n); }
+ssize_t s_recv(int f, void *b, size_t n) { return read(f, b, n); }
 
 void
 xfer(int from, int to, iofunc recvf, iofunc sendf)
 {
 	char buf[12*1024];
-	size_t n;
-	
+	ssize_t n;
+
 	while((n = recvf(from, buf, sizeof buf)) > 0 && sendf(to, buf, n) == n)
 		;
 }
@@ -178,8 +179,8 @@
 		sysfatal("could not init openssl");
 
 	if(*argv && !Rflag){
-		pipe(pin);
-		pipe(pout);
+		if(pipe(pin) < 0 || pipe(pout) < 0)
+			sysfatal("pipe");
 		switch(fork()){
 		case -1:
 			sysfatal("fork");