about summary refs log tree commit diff stats
path: root/src/handlers.c
diff options
context:
space:
mode:
authorRen Kararou <[email protected]>2025-01-25 20:20:37 -0600
committerRen Kararou <[email protected]>2025-01-25 20:20:37 -0600
commit9ec8d6d9dc03791f6ab1e3ad108c8d705d355696 (patch)
treeeaa277a55a1bc5d4db89e3db9f4785becdcbacd3 /src/handlers.c
parenta9bddce6d690838d8bfb586da918c406dd853e93 (diff)
downloadnbtpd-9ec8d6d9dc03791f6ab1e3ad108c8d705d355696.tar.gz
nbtpd-9ec8d6d9dc03791f6ab1e3ad108c8d705d355696.tar.bz2
nbtpd-9ec8d6d9dc03791f6ab1e3ad108c8d705d355696.zip
fix memory leak in main loop; fix memory leak in handlers.c HEAD canon
Diffstat (limited to 'src/handlers.c')
-rw-r--r--src/handlers.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/handlers.c b/src/handlers.c
index 1d4d92c..d42382e 100644
--- a/src/handlers.c
+++ b/src/handlers.c
@@ -442,6 +442,7 @@ void *write_req_resp(void *args) {
 				if (rcv >= 4) {
 					nbd_tftp_packet_data data = nbd_tftp_de_data(rxb, rcv);
 					if (data.opcode == 5) {
+						free(data.data);
 						goto cleanup;
 					}
 					syslog(
@@ -465,22 +466,27 @@ void *write_req_resp(void *args) {
 								);
 								argptr->err = 5;
 								senderror(s, argptr);
+								free(data.data);
 								goto cleanup;
 							}
 							if (fwrite(data.data, 1, data.datalen, fp) < data.datalen) {
 								syslog(LOG_ERR, "filewrite failed for %s: %s", fname, strerror(errno));
 								argptr->err = 0;
 								senderror(s, argptr);
+								free(data.data);
 								goto clean_socket;
 							}
 						}
+						free(data.data);
 						break;
 					}
 					if (data.block_num == (bnum - 1)) {
 						rxon = 0;
 						vcount++;
+						free(data.data);
 						break;
 					}
+					free(data.data);
 				}
 				if (++rxcount > 30) {
 					syslog(LOG_ERR, "retry count exceeded");