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;
}
|