Message ID | 5489925D.5010609@linux.vnet.ibm.com |
---|---|
State | New |
Headers | show |
On Thu, 11 Dec 2014, Adhemerval Zanella wrote: > + int truncating, connreset, n; > + /* There is the following warning on some architectures: > + 'resplen' may be used uninitialized in this function > + [-Wmaybe-uninitialized] > + This is a false positive according to: > + https://www.sourceware.org/ml/libc-alpha/2014-12/msg00323.html > + */ > + DIAG_PUSH_NEEDS_COMMENT; > + DIAG_IGNORE_NEEDS_COMMENT (4.7, "-Wmaybe-uninitialized"); > + int resplen; > + DIAG_POP_NEEDS_COMMENT; * Do you actually need this here, or only around the use of the variable? * An actual analysis of why the variable can't be used uninitialized would be better than a URL. I.e., if buf2 == NULL then this code won't be executed; if buf2 != NULL, then first time round the loop recvresp1 and recvresp2 will be 0 so this code won't be executed but "thisresplenp = &resplen;" followed by "*thisresplenp = rlen;" will be executed so that subsequent times round the loop resplen has been initialized. * The version number in DIAG_IGNORE_NEEDS_COMMENT is the most recent GCC version with which the issue has been observed, not the oldest. * A conditional __GNUC_PREREQ (4, 7) is needed around the DIAG_IGNORE_NEEDS_COMMENT call because 4.6 doesn't have -Wmaybe-uninitialized (if the warnings appear with 4.6, a #else case to use -Wuninitialized instead with 4.6 will be needed).
diff --git a/resolv/res_send.c b/resolv/res_send.c index af42b8a..51ac05c 100644 --- a/resolv/res_send.c +++ b/resolv/res_send.c @@ -96,6 +96,7 @@ static const char rcsid[] = "$BINDId: res_send.c,v 8.38 2000/03/30 20:16:51 vixi #include <string.h> #include <unistd.h> #include <kernel-features.h> +#include <libc-internal.h> #if PACKETSZ > 65536 #define MAXPACKET PACKETSZ @@ -668,7 +669,17 @@ send_vc(res_state statp, // int anssiz = *anssizp; HEADER *anhp = (HEADER *) ans; struct sockaddr_in6 *nsap = EXT(statp).nsaddrs[ns]; - int truncating, connreset, resplen, n; + int truncating, connreset, n; + /* There is the following warning on some architectures: + 'resplen' may be used uninitialized in this function + [-Wmaybe-uninitialized] + This is a false positive according to: + https://www.sourceware.org/ml/libc-alpha/2014-12/msg00323.html + */ + DIAG_PUSH_NEEDS_COMMENT; + DIAG_IGNORE_NEEDS_COMMENT (4.7, "-Wmaybe-uninitialized"); + int resplen; + DIAG_POP_NEEDS_COMMENT; struct iovec iov[4]; u_short len; u_short len2; @@ -787,6 +798,8 @@ send_vc(res_state statp, /* No buffer allocated for the first reply. We can try to use the rest of the user-provided buffer. */ + DIAG_PUSH_NEEDS_COMMENT; + DIAG_IGNORE_NEEDS_COMMENT (4.7, "-Wmaybe-uninitialized"); #if _STRING_ARCH_unaligned *anssizp2 = orig_anssizp - resplen; *ansp2 = *ansp + resplen; @@ -797,6 +810,7 @@ send_vc(res_state statp, *anssizp2 = orig_anssizp - aligned_resplen; *ansp2 = *ansp + aligned_resplen; #endif + DIAG_POP_NEEDS_COMMENT; } else { /* The first reply did not fit into the user-provided buffer. Maybe the second