<!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>