From 133f23d39ed3c20cb14c991983fe670de5dc64a4 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Sun, 22 Sep 2019 16:21:00 +0200 Subject: [PATCH] libnm: copy list of property-infos instead of keeping buffer from GArray We use the "properties_override" GArray to construct the list of property infos. But as we append values to the GArray, the buffer grows exponentially and likely is larger than the actually used number of values. As this data is kept until the end of the program, let's not waste the over-allocated memory and instead copy it to a buffer of the right size. --- libnm-core/nm-setting.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libnm-core/nm-setting.c b/libnm-core/nm-setting.c index e3bd1e2fe..97e344138 100644 --- a/libnm-core/nm-setting.c +++ b/libnm-core/nm-setting.c @@ -442,13 +442,15 @@ has_property_type: sett_info->setting_class = setting_class; if (detail) sett_info->detail = *detail; + nm_assert (properties_override->len > 0); sett_info->property_infos_len = properties_override->len; - sett_info->property_infos = (const NMSettInfoProperty *) g_array_free (properties_override, - properties_override->len == 0); + sett_info->property_infos = nm_memdup (properties_override->data, sizeof (NMSettInfoProperty) * properties_override->len); sett_info->property_infos_sorted = _property_infos_sort (sett_info->property_infos, sett_info->property_infos_len, setting_class); + + g_array_free (properties_override, TRUE); } const NMSettInfoProperty *