From: Yu Watanabe Date: Sun, 16 Nov 2025 04:59:56 +0000 (+0900) Subject: network-internal: do not save partially parsed values X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5a943bae125ff54b68070a2e76af39b065f02848;p=thirdparty%2Fsystemd.git network-internal: do not save partially parsed values --- diff --git a/src/libsystemd-network/network-internal.c b/src/libsystemd-network/network-internal.c index e7c22c9b76e..c8aa6b63e08 100644 --- a/src/libsystemd-network/network-internal.c +++ b/src/libsystemd-network/network-internal.c @@ -261,8 +261,7 @@ int deserialize_dhcp_routes(struct sd_dhcp_route **ret, size_t *ret_size, const if (r == 0) break; - if (!GREEDY_REALLOC(routes, size + 1)) - return -ENOMEM; + struct sd_dhcp_route route = {}; tok = word; @@ -272,7 +271,7 @@ int deserialize_dhcp_routes(struct sd_dhcp_route **ret, size_t *ret_size, const continue; *tok_end = '\0'; - r = inet_aton(tok, &routes[size].dst_addr); + r = inet_aton(tok, &route.dst_addr); if (r == 0) continue; @@ -289,15 +288,18 @@ int deserialize_dhcp_routes(struct sd_dhcp_route **ret, size_t *ret_size, const if (r < 0 || n > 32) continue; - routes[size].dst_prefixlen = (uint8_t) n; + route.dst_prefixlen = (uint8_t) n; tok = tok_end + 1; /* get the gateway */ - r = inet_aton(tok, &routes[size].gw_addr); + r = inet_aton(tok, &route.gw_addr); if (r == 0) continue; - size++; + if (!GREEDY_REALLOC(routes, size + 1)) + return -ENOMEM; + + routes[size++] = route; } *ret_size = size;