libotutil: Avoid infinite recursion during error unwinding

When we clean up from an error, for example copy_file_range() failing
while we generate a static delta (perhaps caused by
https://gitlab.gnome.org/GNOME/libglnx/-/issues/3 or by a
genuine write error), we might free a variant builder that has a
non-null parent. Previously, this caused infinite recursion and a stack
overflow, repeatedly freeing the same object, but Luca Bruno suggested
that the intention here appears to have been to free the parent object.

Partially resolves https://github.com/ostreedev/ostree/issues/2525
(the other bug reported in that issue needs to be resolved by updating
libglnx to a version where libglnx#3 has been fixed).

Signed-off-by: Simon McVittie <smcv@collabora.com>
This commit is contained in:
Simon McVittie 2022-01-28 11:08:00 +00:00
parent 10ddf6e25f
commit 920f85cabc
1 changed files with 1 additions and 1 deletions

View File

@ -830,7 +830,7 @@ static void
ot_variant_builder_info_free (OtVariantBuilderInfo *info)
{
if (info->parent)
ot_variant_builder_info_free (info);
ot_variant_builder_info_free (info->parent);
g_variant_type_free (info->type);
g_array_unref (info->child_ends);