core: Don't assume filter has single operation

Resolves #12719 and #12721
In b78f3dad, we assume that a filter is being created for a
single operation. However, certain tools like Bucket Fill might
pass a GEGL Graph node instead. This causes the call to
gegl_node_get_gegl_operation () to return NULL, which then
crashes when we attempt to get the Operation Class.
This path verifies that we have a single operation before
attempting to go further with getting its class.
This commit is contained in:
Alx Sa
2025-01-12 13:42:42 +00:00
parent d4a7175a0f
commit 2dd55d117c

View File

@ -339,8 +339,8 @@ gimp_drawable_filter_new (GimpDrawable *drawable,
GimpDrawableFilter *filter;
GimpImage *image;
GeglNode *node;
GeglOperation *op;
GeglOperationClass *opclass;
GeglOperation *op = NULL;
GeglOperationClass *opclass = NULL;
gboolean custom_name = TRUE;
g_return_val_if_fail (GIMP_IS_DRAWABLE (drawable), NULL);
@ -348,6 +348,7 @@ gimp_drawable_filter_new (GimpDrawable *drawable,
g_return_val_if_fail (gegl_node_has_pad (operation, "output"), NULL);
op = gegl_node_get_gegl_operation (operation);
if (op != NULL)
opclass = GEGL_OPERATION_GET_CLASS (op);
if (undo_desc == NULL || strlen (undo_desc) == 0)
@ -356,7 +357,8 @@ gimp_drawable_filter_new (GimpDrawable *drawable,
custom_name = FALSE;
}
if (! g_strcmp0 (undo_desc, gegl_operation_class_get_key (opclass, "title")))
if (opclass &&
! g_strcmp0 (undo_desc, gegl_operation_class_get_key (opclass, "title")))
custom_name = FALSE;
filter = g_object_new (GIMP_TYPE_DRAWABLE_FILTER,