From 578aee8c62d3ac5b292734a5678b158dfdd9f757 Mon Sep 17 00:00:00 2001 From: Jehan Date: Tue, 28 Oct 2025 16:17:16 +0100 Subject: [PATCH] app, libgimp, pdb: make an early check on parasite name. Let's make sure we won't trigger CRITICALs on core from a plug-in. --- app/pdb/gimp-cmds.c | 9 +++++++-- app/pdb/image-cmds.c | 9 +++++++-- libgimp/gimp_pdb.c | 7 +++++-- libgimp/gimpimage_pdb.c | 7 +++++-- pdb/groups/gimp.pdb | 12 ++++++++++-- pdb/groups/image.pdb | 12 ++++++++++-- 6 files changed, 44 insertions(+), 12 deletions(-) diff --git a/app/pdb/gimp-cmds.c b/app/pdb/gimp-cmds.c index 1d09d3c024..b25b01a91c 100644 --- a/app/pdb/gimp-cmds.c +++ b/app/pdb/gimp-cmds.c @@ -141,7 +141,10 @@ detach_parasite_invoker (GimpProcedure *procedure, if (success) { - gimp_parasite_detach (gimp, name); + if (name && strlen (name) > 0) + gimp_parasite_detach (gimp, name); + else + success = FALSE; } return gimp_procedure_get_return_values (procedure, success, @@ -333,7 +336,9 @@ register_gimp_procs (GimpPDB *pdb) "gimp-detach-parasite"); gimp_procedure_set_static_help (procedure, "Removes a global parasite.", - "This procedure detaches a global parasite from. It has no return values.", + "This procedure detaches a global parasite.\n" + "\n" + "It will return %FALSE if @name is invalid (%NULL or empty string) and %TRUE otherwise (even if there was no parasite removed, because no parasite was named like this).", NULL); gimp_procedure_set_static_attribution (procedure, "Jay Cox", diff --git a/app/pdb/image-cmds.c b/app/pdb/image-cmds.c index 9dcd1e0b48..61807451f8 100644 --- a/app/pdb/image-cmds.c +++ b/app/pdb/image-cmds.c @@ -2911,7 +2911,10 @@ image_detach_parasite_invoker (GimpProcedure *procedure, if (success) { - gimp_image_parasite_detach (image, name, TRUE); + if (name && strlen (name) > 0) + gimp_image_parasite_detach (image, name, TRUE); + else + success = FALSE; } return gimp_procedure_get_return_values (procedure, success, @@ -5732,7 +5735,9 @@ register_image_procs (GimpPDB *pdb) "gimp-image-detach-parasite"); gimp_procedure_set_static_help (procedure, "Removes a parasite from an image.", - "This procedure detaches a parasite from an image. It has no return values.", + "This procedure detaches a parasite from an image.\n" + "\n" + "It will return %FALSE if @name is invalid (%NULL or empty string) and %TRUE otherwise (even if there was no parasite removed, because no parasite was named like this).", NULL); gimp_procedure_set_static_attribution (procedure, "Jay Cox", diff --git a/libgimp/gimp_pdb.c b/libgimp/gimp_pdb.c index 54ab8ce8c0..ad5b2ebc64 100644 --- a/libgimp/gimp_pdb.c +++ b/libgimp/gimp_pdb.c @@ -149,8 +149,11 @@ gimp_attach_parasite (const GimpParasite *parasite) * * Removes a global parasite. * - * This procedure detaches a global parasite from. It has no return - * values. + * This procedure detaches a global parasite. + * + * It will return %FALSE if @name is invalid (%NULL or empty string) + * and %TRUE otherwise (even if there was no parasite removed, because + * no parasite was named like this). * * Returns: TRUE on success. * diff --git a/libgimp/gimpimage_pdb.c b/libgimp/gimpimage_pdb.c index 54c5d7bfe1..02a5380215 100644 --- a/libgimp/gimpimage_pdb.c +++ b/libgimp/gimpimage_pdb.c @@ -3427,8 +3427,11 @@ gimp_image_attach_parasite (GimpImage *image, * * Removes a parasite from an image. * - * This procedure detaches a parasite from an image. It has no return - * values. + * This procedure detaches a parasite from an image. + * + * It will return %FALSE if @name is invalid (%NULL or empty string) + * and %TRUE otherwise (even if there was no parasite removed, because + * no parasite was named like this). * * Returns: TRUE on success. * diff --git a/pdb/groups/gimp.pdb b/pdb/groups/gimp.pdb index 187795161a..9c22d2f46b 100644 --- a/pdb/groups/gimp.pdb +++ b/pdb/groups/gimp.pdb @@ -119,7 +119,12 @@ sub detach_parasite { $blurb = 'Removes a global parasite.'; $help = <<'HELP'; -This procedure detaches a global parasite from. It has no return values. +This procedure detaches a global parasite. + + +It will return %FALSE if @name is invalid (%NULL or empty string) and +%TRUE otherwise (even if there was no parasite removed, because no +parasite was named like this). HELP &jay_pdb_misc('1998', '2.8'); @@ -132,7 +137,10 @@ HELP %invoke = ( code => <<'CODE' { - gimp_parasite_detach (gimp, name); + if (name && strlen (name) > 0) + gimp_parasite_detach (gimp, name); + else + success = FALSE; } CODE ); diff --git a/pdb/groups/image.pdb b/pdb/groups/image.pdb index 3cfb564aa7..aaf3a7cfbd 100644 --- a/pdb/groups/image.pdb +++ b/pdb/groups/image.pdb @@ -3031,7 +3031,12 @@ sub image_detach_parasite { $blurb = 'Removes a parasite from an image.'; $help = <<'HELP'; -This procedure detaches a parasite from an image. It has no return values. +This procedure detaches a parasite from an image. + + +It will return %FALSE if @name is invalid (%NULL or empty string) and +%TRUE otherwise (even if there was no parasite removed, because no +parasite was named like this). HELP &jay_pdb_misc('1998', '2.8'); @@ -3046,7 +3051,10 @@ HELP %invoke = ( code => <<'CODE' { - gimp_image_parasite_detach (image, name, TRUE); + if (name && strlen (name) > 0) + gimp_image_parasite_detach (image, name, TRUE); + else + success = FALSE; } CODE );