git: 9front

Download patch

ref: a0932e72834ba181642fd8d33dde0c32cbe9237b
parent: 2aa955ad6ebeaa255c85ecd7143d4fcc3491336d
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Fri Jun 23 21:25:22 EDT 2023

snoopy: fix error handling for convM2DNS()

--- a/sys/src/cmd/ip/snoopy/dns.c
+++ b/sys/src/cmd/ip/snoopy/dns.c
@@ -181,6 +181,7 @@
 static Proto dnsqd, dnsan, dnsns, dnsar;
 
 static void donext(Msg*);
+static void dolast(Msg*);
 static DNSmsg dm;
 
 static int
@@ -190,6 +191,8 @@
 
 	if((e = convM2DNS(m->ps, m->pe-m->ps, &dm, nil)) != nil){
 		m->p = seprint(m->p, m->e, "error: %s", e);
+		free(e);
+		dolast(m);
 		return 0;
 	}
 	m->p = seprint(m->p, m->e, "id=%d flags=%#ux", dm.id, dm.flags);
@@ -208,11 +211,16 @@
 		m->pr = &dnsns;
 	else if(dm.ar)
 		m->pr = &dnsar;
-	else{
-		freealldn();
-		memset(&dm, 0, sizeof dm);
-		m->pr = nil;
-	}
+	else
+		dolast(m);
+}
+
+static void
+dolast(Msg *m)
+{
+	freealldn();
+	memset(&dm, 0, sizeof dm);
+	m->pr = nil;
 }
 
 static int
--