<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<p>Hi Simon,<br>
</p>
<p>compiling dnsmasq v2.92test8 on FreeBSD 14.2-RELEASE (which uses
clang 18 as default compiler) yields a new warning:<br>
<br>
<blockquote type="cite"><span style="font-family:monospace"><span
style="font-weight:bold;color:#000000;background-color:#ffffff;">tftp.c:365:7:
</span><span
style="font-weight:bold;color:#ff54ff;background-color:#ffffff;">warning:
</span><span
style="font-weight:bold;color:#000000;background-color:#ffffff;">variable
'filename' is used uninitialized whenever '||' condition is
true [-Wsometimes-uninitialized]</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 365 |
if (ntohs(*((unsigned short *)packet)) != OP_RRQ ||</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> |
</span><span
style="font-weight:bold;color:#54ff54;background-color:#ffffff;"> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span
style="font-weight:bold;color:#000000;background-color:#ffffff;">/usr/include/netinet/in.h:121:18:
</span><span
style="font-weight:bold;color:#54ffff;background-color:#ffffff;">note: </span><span
style="color:#000000;background-color:#ffffff;">expanded
from macro 'ntohs'</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 121 |
#define ntohs(x) __ntohs(x)</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> |
</span><span
style="font-weight:bold;color:#54ff54;background-color:#ffffff;"> ^</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span
style="font-weight:bold;color:#000000;background-color:#ffffff;">/usr/include/sys/_endian.h:89:20:
</span><span
style="font-weight:bold;color:#54ffff;background-color:#ffffff;">note: </span><span
style="color:#000000;background-color:#ffffff;">expanded
from macro '__ntohs'</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 89 |
#define __ntohs(x) (__bswap16(x))</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> |
</span><span
style="font-weight:bold;color:#54ff54;background-color:#ffffff;"> ^</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span
style="font-weight:bold;color:#000000;background-color:#ffffff;">tftp.c:370:12:
</span><span
style="font-weight:bold;color:#54ffff;background-color:#ffffff;">note: </span><span
style="color:#000000;background-color:#ffffff;">uninitialized
use occurs here</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 370 |
if (!filename)</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> |
</span><span
style="font-weight:bold;color:#54ff54;background-color:#ffffff;"> ^~~~~~~~</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span
style="font-weight:bold;color:#000000;background-color:#ffffff;">tftp.c:365:7:
</span><span
style="font-weight:bold;color:#54ffff;background-color:#ffffff;">note: </span><span
style="color:#000000;background-color:#ffffff;">remove the
'||' if its condition is always false</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 365 |
if (ntohs(*((unsigned short *)packet)) != OP_RRQ ||</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> |
</span><span
style="font-weight:bold;color:#54ff54;background-color:#ffffff;"> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span
style="font-weight:bold;color:#000000;background-color:#ffffff;">/usr/include/netinet/in.h:121:18:
</span><span
style="font-weight:bold;color:#54ffff;background-color:#ffffff;">note: </span><span
style="color:#000000;background-color:#ffffff;">expanded
from macro 'ntohs'</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 121 |
#define ntohs(x) __ntohs(x)</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> |
</span><span
style="font-weight:bold;color:#54ff54;background-color:#ffffff;"> ^</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span
style="font-weight:bold;color:#000000;background-color:#ffffff;">/usr/include/sys/_endian.h:89:20:
</span><span
style="font-weight:bold;color:#54ffff;background-color:#ffffff;">note: </span><span
style="color:#000000;background-color:#ffffff;">expanded
from macro '__ntohs'</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 89 |
#define __ntohs(x) (__bswap16(x))</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> |
</span><span
style="font-weight:bold;color:#54ff54;background-color:#ffffff;"> ^</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span
style="font-weight:bold;color:#000000;background-color:#ffffff;">tftp.c:48:17:
</span><span
style="font-weight:bold;color:#54ffff;background-color:#ffffff;">note: </span><span
style="color:#000000;background-color:#ffffff;">initialize
the variable 'filename' to silence this warning</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 48 |
char *filename, *mode, *p, *end, *opt;</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> |
</span><span
style="font-weight:bold;color:#54ff54;background-color:#ffffff;"> ^</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> |
</span><span style="color:#18b218;background-color:#ffffff;"> =
NULL</span><br>
<span style="color:#000000;background-color:#ffffff;">
</span><br>
</span></blockquote>
This is with our default compiler on FreeBSD, clang 18. (I tried
GCC 15, which does not warn about this.)<br>
</p>
<p>
<blockquote type="cite"><span style="font-family:monospace"><span
style="color:#000000;background-color:#ffffff;">$ cc
--version</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;">FreeBSD
clang version 18.1.6
(<a class="moz-txt-link-freetext" href="https://github.com/llvm/llvm-project.git">https://github.com/llvm/llvm-project.git</a>
llvmorg-18.1.6-0-g1118c2e05e67)</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;">Target:
x86_64-unknown-freebsd14.2</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;">Thread
model: posix</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;">InstalledDir:
/usr/bin</span><br>
<span style="color:#000000;background-color:#ffffff;">
</span><br>
</span></blockquote>
And was apparently introduced this week with this commit:</p>
<p>
<blockquote type="cite"><span style="font-family:monospace"><span
style="color:#b26818;background-color:#ffffff;">commit
d1008215dc95334e88a4a8e9d0ba0975a94c1f63</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;">Author:
Simon Kelley <a class="moz-txt-link-rfc2396E" href="mailto:simon@thekelleys.org.uk"><simon@thekelleys.org.uk></a></span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;">Date:
Wed May 14 21:15:17 2025 +0100</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<br>
<span style="color:#000000;background-color:#ffffff;">
Better error message when rejecting a TFTP transfer.</span><br>
<span style="color:#000000;background-color:#ffffff;">
</span><br>
</span></blockquote>
I don't oversee enough of the code to judge whether the
first-16bits-of-packet-in-network-order != OP_RRQ is relevant
here. If it's from the network, of course any garbage can be in
there and kick the reporting in lines 370ff off balance.</p>
<p>What do you think?</p>
<p><br>
</p>
<p>Also, lower priority, </p>
<p>finding #2, the attached patch fixes a warning about an unused
static function:</p>
<p><span style="font-family:monospace"><span
style="font-weight:bold;color:#000000;background-color:#ffffff;">forward.c:673:23:</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="font-weight:bold;color:#ff54ff;background-color:#ffffff;">warning:
</span><span style="color:#000000;background-color:#ffffff;">'</span><span
style="font-weight:bold;color:#000000;background-color:#ffffff;">domain_find_sets</span><span
style="color:#000000;background-color:#ffffff;">' defined but
not used [</span><span
style="font-weight:bold;color:#ff54ff;background-color:#ffffff;">-Wunused-function</span><span
style="color:#000000;background-color:#ffffff;">]</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 673 |
static struct ipsets *</span><span
style="font-weight:bold;color:#ff54ff;background-color:#ffffff;">domain_find_sets</span><span
style="color:#000000;background-color:#ffffff;">(struct ipsets
*setlist, const char *domain) {</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> |
</span><span
style="font-weight:bold;color:#ff54ff;background-color:#ffffff;">^~~~~~~~~~~~~~~~</span><br>
<span style="color:#000000;background-color:#ffffff;">
</span><br>
<br>
</span></p>
<p>finding #3: GCC15 is a bit overzealous with its warnings and
displays this on what seems reasonable code to me:<br>
</p>
<p><span style="font-family:monospace">
<blockquote type="cite"><span style="font-family:monospace"><span
style="font-weight:bold;color:#000000;background-color:#ffffff;">edns0.c:</span><span
style="color:#000000;background-color:#ffffff;"> In
function '</span><span
style="font-weight:bold;color:#000000;background-color:#ffffff;">add_umbrella_opt</span><span
style="color:#000000;background-color:#ffffff;">':</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span
style="font-weight:bold;color:#000000;background-color:#ffffff;">edns0.c:512:30:</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="font-weight:bold;color:#ff54ff;background-color:#ffffff;">warning:
</span><span style="color:#000000;background-color:#ffffff;">initializer-string
for array of '</span><span
style="font-weight:bold;color:#000000;background-color:#ffffff;">unsigned
char</span><span
style="color:#000000;background-color:#ffffff;">'
truncates NUL terminator but destination lacks '</span><span
style="font-weight:bold;color:#000000;background-color:#ffffff;">nonstring</span><span
style="color:#000000;background-color:#ffffff;">'
attribute (5 chars into 4 available) [</span><span
style="font-weight:bold;color:#ff54ff;background-color:#ffffff;">-Wunterminated-string-initialization</span><span
style="color:#000000;background-color:#ffffff;">]</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 512
| struct umbrella_opt opt = {</span><span
style="font-weight:bold;color:#ff54ff;background-color:#ffffff;">{</span><span
style="color:#000000;background-color:#ffffff;">"ODNS"},
UMBRELLA_VERSION, 0, {0}};</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;">
| </span><span
style="font-weight:bold;color:#ff54ff;background-color:#ffffff;">^</span><br>
<span style="color:#000000;background-color:#ffffff;">
</span></span></blockquote>
<br>
</span></p>
<p>Cheers,<br>
Matthias<br>
</p>
</body>
</html>