mirror of
https://gitlab.gnome.org/GNOME/gimp.git
synced 2025-10-05 21:02:42 +02:00
app, pdb: do not leak a GFile in gimp_temp_file() or any future…
… PDB API which will return a newly allocated GFile. Though gimp_temp_file() was so far the only such case where a returned GFile was being leaked, it may happen again. So the PDB must instead assume that all returned GFile-s have their own reference and take over said reference. And therefore update all other functions to increase the internal GFile-s reference counts.
This commit is contained in:
@@ -223,7 +223,7 @@ temp_file_invoker (GimpProcedure *procedure,
|
||||
error ? *error : NULL);
|
||||
|
||||
if (success)
|
||||
g_value_set_object (gimp_value_array_index (return_vals, 1), file);
|
||||
g_value_take_object (gimp_value_array_index (return_vals, 1), file);
|
||||
|
||||
return return_vals;
|
||||
}
|
||||
|
@@ -2318,13 +2318,15 @@ image_get_file_invoker (GimpProcedure *procedure,
|
||||
if (success)
|
||||
{
|
||||
file = gimp_image_get_any_file (image);
|
||||
if (file)
|
||||
g_object_ref (file);
|
||||
}
|
||||
|
||||
return_vals = gimp_procedure_get_return_values (procedure, success,
|
||||
error ? *error : NULL);
|
||||
|
||||
if (success)
|
||||
g_value_set_object (gimp_value_array_index (return_vals, 1), file);
|
||||
g_value_take_object (gimp_value_array_index (return_vals, 1), file);
|
||||
|
||||
return return_vals;
|
||||
}
|
||||
@@ -2396,13 +2398,15 @@ image_get_xcf_file_invoker (GimpProcedure *procedure,
|
||||
if (success)
|
||||
{
|
||||
file = gimp_image_get_file (image);
|
||||
if (file)
|
||||
g_object_ref (file);
|
||||
}
|
||||
|
||||
return_vals = gimp_procedure_get_return_values (procedure, success,
|
||||
error ? *error : NULL);
|
||||
|
||||
if (success)
|
||||
g_value_set_object (gimp_value_array_index (return_vals, 1), file);
|
||||
g_value_take_object (gimp_value_array_index (return_vals, 1), file);
|
||||
|
||||
return return_vals;
|
||||
}
|
||||
@@ -2425,13 +2429,15 @@ image_get_imported_file_invoker (GimpProcedure *procedure,
|
||||
if (success)
|
||||
{
|
||||
file = gimp_image_get_imported_file (image);
|
||||
if (file)
|
||||
g_object_ref (file);
|
||||
}
|
||||
|
||||
return_vals = gimp_procedure_get_return_values (procedure, success,
|
||||
error ? *error : NULL);
|
||||
|
||||
if (success)
|
||||
g_value_set_object (gimp_value_array_index (return_vals, 1), file);
|
||||
g_value_take_object (gimp_value_array_index (return_vals, 1), file);
|
||||
|
||||
return return_vals;
|
||||
}
|
||||
@@ -2454,13 +2460,15 @@ image_get_exported_file_invoker (GimpProcedure *procedure,
|
||||
if (success)
|
||||
{
|
||||
file = gimp_image_get_exported_file (image);
|
||||
if (file)
|
||||
g_object_ref (file);
|
||||
}
|
||||
|
||||
return_vals = gimp_procedure_get_return_values (procedure, success,
|
||||
error ? *error : NULL);
|
||||
|
||||
if (success)
|
||||
g_value_set_object (gimp_value_array_index (return_vals, 1), file);
|
||||
g_value_take_object (gimp_value_array_index (return_vals, 1), file);
|
||||
|
||||
return return_vals;
|
||||
}
|
||||
|
@@ -166,14 +166,14 @@ link_layer_get_file_invoker (GimpProcedure *procedure,
|
||||
|
||||
if (success)
|
||||
{
|
||||
file = gimp_link_get_file (gimp_link_layer_get_link (layer), NULL, NULL);
|
||||
file = g_object_ref (gimp_link_get_file (gimp_link_layer_get_link (layer), NULL, NULL));
|
||||
}
|
||||
|
||||
return_vals = gimp_procedure_get_return_values (procedure, success,
|
||||
error ? *error : NULL);
|
||||
|
||||
if (success)
|
||||
g_value_set_object (gimp_value_array_index (return_vals, 1), file);
|
||||
g_value_take_object (gimp_value_array_index (return_vals, 1), file);
|
||||
|
||||
return return_vals;
|
||||
}
|
||||
|
@@ -2414,6 +2414,8 @@ HELP
|
||||
code => <<'CODE'
|
||||
{
|
||||
file = gimp_image_get_any_file (image);
|
||||
if (file)
|
||||
g_object_ref (file);
|
||||
}
|
||||
CODE
|
||||
);
|
||||
@@ -2500,6 +2502,8 @@ HELP
|
||||
code => <<'CODE'
|
||||
{
|
||||
file = gimp_image_get_file (image);
|
||||
if (file)
|
||||
g_object_ref (file);
|
||||
}
|
||||
CODE
|
||||
);
|
||||
@@ -2534,6 +2538,8 @@ HELP
|
||||
code => <<'CODE'
|
||||
{
|
||||
file = gimp_image_get_imported_file (image);
|
||||
if (file)
|
||||
g_object_ref (file);
|
||||
}
|
||||
CODE
|
||||
);
|
||||
@@ -2567,6 +2573,8 @@ HELP
|
||||
code => <<'CODE'
|
||||
{
|
||||
file = gimp_image_get_exported_file (image);
|
||||
if (file)
|
||||
g_object_ref (file);
|
||||
}
|
||||
CODE
|
||||
);
|
||||
|
@@ -161,7 +161,7 @@ HELP
|
||||
%invoke = (
|
||||
code => <<'CODE'
|
||||
{
|
||||
file = gimp_link_get_file (gimp_link_layer_get_link (layer), NULL, NULL);
|
||||
file = g_object_ref (gimp_link_get_file (gimp_link_layer_get_link (layer), NULL, NULL));
|
||||
}
|
||||
CODE
|
||||
);
|
||||
|
@@ -488,7 +488,7 @@ package Gimp::CodeGen::pdb;
|
||||
get_value_func => '$var = g_value_get_object ($value)',
|
||||
dup_value_func => '$var = GIMP_VALUES_DUP_FILE ($value)',
|
||||
set_value_func => 'g_value_set_object ($value, $var)',
|
||||
take_value_func => 'g_value_set_object ($value, $var)' },
|
||||
take_value_func => 'g_value_take_object ($value, $var)' },
|
||||
|
||||
parasite => { name => 'PARASITE',
|
||||
gtype => 'GIMP_TYPE_PARASITE',
|
||||
|
Reference in New Issue
Block a user