From a170d63874f279d4bf48995a19285d7c7e7ad361 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Fri, 28 Nov 2025 08:32:10 +0100 Subject: [PATCH] src: fix shadowed local variables MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Fix shadowed local variables and enable warning to prevent more shadowed variables in the future. Signed-off-by: Álvaro Fernández Rojas --- CMakeLists.txt | 2 ++ src/config.c | 12 ++++++------ src/dhcpv4.c | 32 ++++++++++++++++---------------- src/dhcpv6-ia.c | 4 ++-- src/dhcpv6.c | 18 +++++++++--------- src/dhcpv6.h | 12 +++++++++--- src/router.c | 8 ++++---- 7 files changed, 48 insertions(+), 40 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 703d6b1..06b9af4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,8 +31,10 @@ target_compile_options(${PROJECT_NAME} PRIVATE -Wformat) target_compile_options(${PROJECT_NAME} PRIVATE -Werror=format-security) target_compile_options(${PROJECT_NAME} PRIVATE -Werror=format-nonliteral) target_compile_options(${PROJECT_NAME} PRIVATE -Wimplicit-fallthrough=5) +target_compile_options(${PROJECT_NAME} PRIVATE -Wno-shadow=compatible-local) target_compile_options(${PROJECT_NAME} PRIVATE -Wno-unused-parameter) target_compile_options(${PROJECT_NAME} PRIVATE -Wmissing-declarations) +target_compile_options(${PROJECT_NAME} PRIVATE -Wshadow=local) # Libraries diff --git a/src/config.c b/src/config.c index ec110b5..f5773dc 100644 --- a/src/config.c +++ b/src/config.c @@ -1387,7 +1387,7 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr uint8_t buf[DNS_MAX_NAME_LEN]; char *domain; size_t domainlen; - int len; + int ds_len; uint8_t *tmp; if (blobmsg_type(cur) != BLOBMSG_TYPE_STRING || !blobmsg_check_attr(cur, false)) @@ -1399,20 +1399,20 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr if (domainlen > 0 && domain[domainlen - 1] == '.') domain[domainlen - 1] = 0; - len = dn_comp(domain, buf, sizeof(buf), NULL, NULL); - if (len <= 0) { + ds_len = dn_comp(domain, buf, sizeof(buf), NULL, NULL); + if (ds_len <= 0) { error("Invalid %s value configured for interface '%s'", iface_attrs[IFACE_ATTR_DNS_DOMAIN_SEARCH].name, iface->name); continue; } - tmp = realloc(iface->dns_search, iface->dns_search_len + len); + tmp = realloc(iface->dns_search, iface->dns_search_len + ds_len); if (!tmp) goto err; iface->dns_search = tmp; - memcpy(&iface->dns_search[iface->dns_search_len], buf, len); - iface->dns_search_len += len; + memcpy(&iface->dns_search[iface->dns_search_len], buf, ds_len); + iface->dns_search_len += ds_len; } } diff --git a/src/dhcpv4.c b/src/dhcpv4.c index 17c34ba..5afeb91 100644 --- a/src/dhcpv4.c +++ b/src/dhcpv4.c @@ -1095,9 +1095,9 @@ void dhcpv4_handle_msg(void *src_addr, void *data, size_t len, /* Note: each option might get called more than once */ for (size_t i = 0; i < sizeof(std_opts) + req_opts_len; i++) { - uint8_t opt = i < sizeof(std_opts) ? std_opts[i] : req_opts[i - sizeof(std_opts)]; + uint8_t r_opt = i < sizeof(std_opts) ? std_opts[i] : req_opts[i - sizeof(std_opts)]; - switch (opt) { + switch (r_opt) { case DHCPV4_OPT_NETMASK: if (!lease) break; @@ -1216,20 +1216,20 @@ void dhcpv4_handle_msg(void *src_addr, void *data, size_t len, iov[IOV_SRCH_DOMAIN_NAME].iov_base = iface->dns_search; iov[IOV_SRCH_DOMAIN_NAME].iov_len = iface->dns_search_len; } else if (!res_init() && _res.dnsrch[0] && _res.dnsrch[0][0]) { - int len; + int dds_len; if (!iov[IOV_SRCH_DOMAIN_NAME].iov_base) iov[IOV_SRCH_DOMAIN_NAME].iov_base = alloca(DNS_MAX_NAME_LEN); - len = dn_comp(_res.dnsrch[0], + dds_len = dn_comp(_res.dnsrch[0], iov[IOV_SRCH_DOMAIN_NAME].iov_base, DNS_MAX_NAME_LEN, NULL, NULL); - if (len < 0) + if (dds_len < 0) break; - reply_srch_domain.len = len; + reply_srch_domain.len = dds_len; iov[IOV_SRCH_DOMAIN].iov_len = sizeof(reply_srch_domain); - iov[IOV_SRCH_DOMAIN_NAME].iov_len = len; + iov[IOV_SRCH_DOMAIN_NAME].iov_len = dds_len; } break; @@ -1247,8 +1247,8 @@ void dhcpv4_handle_msg(void *src_addr, void *data, size_t len, if (!lease || reply_dnr.len > 0) break; - for (size_t i = 0; i < iface->dnr_cnt; i++) { - struct dnr_options *dnr = &iface->dnr[i]; + for (size_t j = 0; j < iface->dnr_cnt; j++) { + struct dnr_options *dnr = &iface->dnr[j]; if (dnr->addr4_cnt == 0 && dnr->addr6_cnt > 0) continue; @@ -1269,8 +1269,8 @@ void dhcpv4_handle_msg(void *src_addr, void *data, size_t len, dnrs = alloca(dnrs_len); uint8_t *pos = (uint8_t *)dnrs; - for (size_t i = 0; i < iface->dnr_cnt; i++) { - struct dnr_options *dnr = &iface->dnr[i]; + for (size_t j = 0; j < iface->dnr_cnt; j++) { + struct dnr_options *dnr = &iface->dnr[j]; struct dhcpv4_dnr *d4dnr = (struct dhcpv4_dnr *)pos; uint16_t d4dnr_len = sizeof(uint16_t) + sizeof(uint8_t) + dnr->adn_len; uint16_t d4dnr_priority_be = htons(dnr->priority); @@ -1319,13 +1319,13 @@ void dhcpv4_handle_msg(void *src_addr, void *data, size_t len, break; uint8_t *buf = alloca(2 + uri_len); - struct dhcpv4_option *opt = (struct dhcpv4_option *)buf; + struct dhcpv4_option *cp_opt = (struct dhcpv4_option *)buf; - opt->code = DHCPV4_OPT_CAPTIVE_PORTAL; - opt->len = uri_len; - memcpy(opt->data, iface->captive_portal_uri, uri_len); + cp_opt->code = DHCPV4_OPT_CAPTIVE_PORTAL; + cp_opt->len = uri_len; + memcpy(cp_opt->data, iface->captive_portal_uri, uri_len); - iov[IOV_CAPTIVE_PORTAL].iov_base = opt; + iov[IOV_CAPTIVE_PORTAL].iov_base = cp_opt; iov[IOV_CAPTIVE_PORTAL].iov_len = 2 + uri_len; break; } diff --git a/src/dhcpv6-ia.c b/src/dhcpv6-ia.c index 87b124b..ca3f89d 100644 --- a/src/dhcpv6-ia.c +++ b/src/dhcpv6-ia.c @@ -1002,7 +1002,7 @@ ssize_t dhcpv6_ia_handle_IAs(uint8_t *buf, size_t buflen, struct interface *ifac if (is_pd) { uint8_t *sdata; uint16_t stype, slen; - dhcpv6_for_each_option(&ia[1], odata + olen, stype, slen, sdata) { + dhcpv6_for_each_sub_option(&ia[1], odata + olen, stype, slen, sdata) { if (stype != DHCPV6_OPT_IA_PREFIX || slen < sizeof(struct dhcpv6_ia_prefix) - 4) continue; @@ -1045,7 +1045,7 @@ ssize_t dhcpv6_ia_handle_IAs(uint8_t *buf, size_t buflen, struct interface *ifac } else if (is_na) { uint8_t *sdata; uint16_t stype, slen; - dhcpv6_for_each_option(&ia[1], odata + olen, stype, slen, sdata) { + dhcpv6_for_each_sub_option(&ia[1], odata + olen, stype, slen, sdata) { if (stype != DHCPV6_OPT_IA_ADDR || slen < sizeof(struct dhcpv6_ia_addr) - 4) continue; diff --git a/src/dhcpv6.c b/src/dhcpv6.c index 06b7f59..03537fd 100644 --- a/src/dhcpv6.c +++ b/src/dhcpv6.c @@ -553,8 +553,8 @@ static void handle_client_request(void *addr, void *data, size_t len, break; case DHCPV6_OPT_DNR: - for (size_t i = 0; i < iface->dnr_cnt; i++) { - struct dnr_options *dnr = &iface->dnr[i]; + for (size_t j = 0; j < iface->dnr_cnt; j++) { + struct dnr_options *dnr = &iface->dnr[j]; if (dnr->addr6_cnt == 0 && dnr->addr4_cnt > 0) continue; @@ -572,8 +572,8 @@ static void handle_client_request(void *addr, void *data, size_t len, dnrs = alloca(dnrs_len); uint8_t *pos = (uint8_t *)dnrs; - for (size_t i = 0; i < iface->dnr_cnt; i++) { - struct dnr_options *dnr = &iface->dnr[i]; + for (size_t j = 0; j < iface->dnr_cnt; j++) { + struct dnr_options *dnr = &iface->dnr[j]; struct dhcpv6_dnr *d6dnr = (struct dhcpv6_dnr *)pos; uint16_t d6dnr_type_be = htons(DHCPV6_OPT_DNR); uint16_t d6dnr_len = 2 * sizeof(uint16_t) + dnr->adn_len; @@ -620,11 +620,11 @@ static void handle_client_request(void *addr, void *data, size_t len, size_t dns_search_len = iface->dns_search_len; if (!dns_search && !res_init() && _res.dnsrch[0] && _res.dnsrch[0][0]) { - int len = dn_comp(_res.dnsrch[0], dns_search_buf, + int ds_len = dn_comp(_res.dnsrch[0], dns_search_buf, sizeof(dns_search_buf), NULL, NULL); - if (len > 0) { + if (ds_len > 0) { dns_search = dns_search_buf; - dns_search_len = len; + dns_search_len = ds_len; } } @@ -874,10 +874,10 @@ static void relay_server_response(uint8_t *data, size_t len) if (payload_data[0] == DHCPV6_MSG_RELAY_REPL) { target.sin6_port = htons(DHCPV6_SERVER_PORT); } else { /* Go through the payload data */ - struct dhcpv6_client_header *h = (void*)payload_data; + struct dhcpv6_client_header *dch = (void*)payload_data; end = payload_data + payload_len; - dhcpv6_for_each_option(&h[1], end, otype, olen, odata) { + dhcpv6_for_each_option(&dch[1], end, otype, olen, odata) { if (otype == DHCPV6_OPT_DNS_SERVERS && olen >= sizeof(struct in6_addr)) { dns_addrs6 = (struct in6_addr*)odata; dns_addrs6_cnt = olen / sizeof(struct in6_addr); diff --git a/src/dhcpv6.h b/src/dhcpv6.h index 0a7628c..63301ac 100644 --- a/src/dhcpv6.h +++ b/src/dhcpv6.h @@ -167,10 +167,16 @@ struct dhcpv6_cer_id { struct in6_addr addr; }; -#define dhcpv6_for_each_option(start, end, otype, olen, odata)\ - for (uint8_t *_o = (uint8_t*)(start); _o + 4 <= (end) &&\ - ((otype) = _o[0] << 8 | _o[1]) && ((odata) = (void*)&_o[4]) &&\ +#define dhcpv6_for_each_option(start, end, otype, olen, odata) \ + for (uint8_t *_o = (uint8_t*)(start); _o + 4 <= (end) && \ + ((otype) = _o[0] << 8 | _o[1]) && ((odata) = (void*)&_o[4]) && \ ((olen) = _o[2] << 8 | _o[3]) + (odata) <= (end); \ _o += 4 + (_o[2] << 8 | _o[3])) +#define dhcpv6_for_each_sub_option(start, end, otype, olen, odata) \ + for (uint8_t *_so = (uint8_t*)(start); _so + 4 <= (end) && \ + ((otype) = _so[0] << 8 | _so[1]) && ((odata) = (void*)&_so[4]) && \ + ((olen) = _so[2] << 8 | _so[3]) + (odata) <= (end); \ + _so += 4 + (_so[2] << 8 | _so[3])) + #endif /* _DHCPV6_H_ */ diff --git a/src/router.c b/src/router.c index b882e01..4fe8ccf 100644 --- a/src/router.c +++ b/src/router.c @@ -699,11 +699,11 @@ static int send_router_advert(struct interface *iface, const struct in6_addr *fr continue; /* PIO filtered out of this RA */ } - for (size_t i = 0; i < pfxs_cnt; ++i) { - if (addr->prefix_len == pfxs[i].nd_opt_pi_prefix_len && - !odhcpd_bmemcmp(&pfxs[i].nd_opt_pi_prefix, + for (size_t j = 0; j < pfxs_cnt; ++j) { + if (addr->prefix_len == pfxs[j].nd_opt_pi_prefix_len && + !odhcpd_bmemcmp(&pfxs[j].nd_opt_pi_prefix, &addr->addr.in6, addr->prefix_len)) - p = &pfxs[i]; + p = &pfxs[j]; } if (!p) { -- 2.30.2