Merge branch 'win32-network-monitor-error' into 'main'

gwin32networkmonitor: Fix returning address of local variable

See merge request GNOME/glib!3425
This commit is contained in:
Philip Withnall 2023-05-09 12:27:05 +00:00
commit 1461c29301

View File

@ -78,24 +78,24 @@ g_win32_network_monitor_init (GWin32NetworkMonitor *win)
}
static gboolean
win_network_monitor_get_ip_info (IP_ADDRESS_PREFIX prefix,
GSocketFamily *family,
const guint8 **dest,
gsize *len)
win_network_monitor_get_ip_info (const IP_ADDRESS_PREFIX *prefix,
GSocketFamily *family,
const guint8 **dest,
gsize *len)
{
switch (prefix.Prefix.si_family)
switch (prefix->Prefix.si_family)
{
case AF_UNSPEC:
/* Fall-through: AF_UNSPEC deliveres both IPV4 and IPV6 infos, let`s stick with IPV4 here */
case AF_INET:
*family = G_SOCKET_FAMILY_IPV4;
*dest = (guint8 *) &prefix.Prefix.Ipv4.sin_addr;
*len = prefix.PrefixLength;
*dest = (guint8 *) &(prefix->Prefix.Ipv4.sin_addr);
*len = prefix->PrefixLength;
break;
case AF_INET6:
*family = G_SOCKET_FAMILY_IPV6;
*dest = (guint8 *) &prefix.Prefix.Ipv6.sin6_addr;
*len = prefix.PrefixLength;
*dest = (guint8 *) &(prefix->Prefix.Ipv6.sin6_addr);
*len = prefix->PrefixLength;
break;
default:
return FALSE;
@ -152,7 +152,7 @@ win_network_monitor_process_table (GWin32NetworkMonitor *win,
route = routes->Table + i;
if (!win_network_monitor_get_ip_info (route->DestinationPrefix, &family, &dest, &len))
if (!win_network_monitor_get_ip_info (&route->DestinationPrefix, &family, &dest, &len))
continue;
network = get_network_mask (family, dest, len);
@ -218,13 +218,13 @@ win_network_monitor_invoke_route_changed (gpointer user_data)
switch (route_data->type)
{
case MibDeleteInstance:
if (!win_network_monitor_get_ip_info (route_data->route->DestinationPrefix, &family, &dest, &len))
if (!win_network_monitor_get_ip_info (&route_data->route->DestinationPrefix, &family, &dest, &len))
break;
remove_network (route_data->win, family, dest, len);
break;
case MibAddInstance:
if (!win_network_monitor_get_ip_info (route_data->route->DestinationPrefix, &family, &dest, &len))
if (!win_network_monitor_get_ip_info (&route_data->route->DestinationPrefix, &family, &dest, &len))
break;
add_network (route_data->win, family, dest, len);