aboutsummaryrefslogtreecommitdiffstats
path: root/main/opensmtpd/musl-compat-freeaddrinfo.patch
blob: da05e19a3e5568ca1fa847d35d96a81305a7bf93 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Gilles Chehade:
  A recent change in musl's freeaddrinfo() causes it to no longer be
  NULL-safe and segv when passed a NULL pointer.
  For the next release, I think the only solution for Alpine is to ship a
  patch in their package to NULL-protect all freeaddrinfo() calls until
  we sort out if this is going to stay or be reverted, or at the very
  least until the next major release if we decide to NULL-protect
  upstream.

See https://github.com/OpenSMTPD/OpenSMTPD/issues/929#issuecomment-549420229

--- a/smtpd/dns.c
+++ b/smtpd/dns.c
@@ -115,7 +115,8 @@
 		*sl = res->ai_addrlen;
 	}
 
-	freeaddrinfo(res);
+	if (res)
+		freeaddrinfo(res);
 	return (1);
 }
 
--- a/smtpd/mail.lmtp.c
+++ b/smtpd/mail.lmtp.c
@@ -168,7 +168,8 @@
 		break;
 	}
 
-	freeaddrinfo(res0);
+	if (res0)
+		freeaddrinfo(res0);
 	if (s == -1)
 		errx(EX_TEMPFAIL, "%s", cause);
 
--- a/smtpd/parse.y
+++ b/smtpd/parse.y
@@ -2397,7 +2397,8 @@
 		cnt++;
 	}
 
-	freeaddrinfo(res0);
+	if (res0)
+		freeaddrinfo(res0);
 	return (cnt);
 }
 
--- a/smtpd/resolver.c
+++ b/smtpd/resolver.c
@@ -334,7 +334,8 @@
 	m_add_int(s->proc, ar->ar_errno);
 	m_close(s->proc);
 
-	freeaddrinfo(ar->ar_addrinfo);
+	if (ar->ar_addrinfo)
+		freeaddrinfo(ar->ar_addrinfo);
 	free(s);
 }
 
--- a/smtpd/util.c
+++ b/smtpd/util.c
@@ -782,7 +782,8 @@
 		return -1;
 	}
 
-	freeaddrinfo(res);
+	if (res)
+		freeaddrinfo(res);
 	return 0;
 }