From 1f1404dc93178f18f2c9bdefe164dc914a3efa93 Mon Sep 17 00:00:00 2001 From: Alx Sa Date: Fri, 6 Jun 2025 20:15:07 +0000 Subject: [PATCH] script-fu: Respect no-validate flag in Script-fu GIMP 3.0 enforces stricter parameter range checks compared to GIMP 2.10. As a result, scripts that are the right datatype but go outside the parameter range will fail. In GimpProcedure, we have checks if a no-validate flag is set to bypass these constraints. This patch adds those checks to Script-fu so it also knows to not check ranges if no-validate is set. --- .../script-fu/libscriptfu/scheme-wrapper.c | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/plug-ins/script-fu/libscriptfu/scheme-wrapper.c b/plug-ins/script-fu/libscriptfu/scheme-wrapper.c index 8372bdc33a..c5aebb2cf3 100644 --- a/plug-ins/script-fu/libscriptfu/scheme-wrapper.c +++ b/plug-ins/script-fu/libscriptfu/scheme-wrapper.c @@ -765,8 +765,10 @@ script_fu_marshal_arg_to_value (scheme *sc, GParamSpecInt *ispec = G_PARAM_SPEC_INT (arg_spec); gint v = sc->vptr->ivalue (sc->vptr->pair_car (a)); - if (v < ispec->minimum || v > ispec->maximum) - return script_int_range_error (sc, arg_index, proc_name, ispec->minimum, ispec->maximum, v); + if (! (arg_spec->flags & GIMP_PARAM_NO_VALIDATE) && + (v < ispec->minimum || v > ispec->maximum)) + return script_int_range_error (sc, arg_index, proc_name, + ispec->minimum, ispec->maximum, v); g_value_set_int (value, v); if (strvalue) @@ -784,8 +786,10 @@ script_fu_marshal_arg_to_value (scheme *sc, GParamSpecUInt *ispec = G_PARAM_SPEC_UINT (arg_spec); gint v = sc->vptr->ivalue (arg_val); - if (v < ispec->minimum || v > ispec->maximum) - return script_int_range_error (sc, arg_index, proc_name, ispec->minimum, ispec->maximum, v); + if (! (arg_spec->flags & GIMP_PARAM_NO_VALIDATE) && + (v < ispec->minimum || v > ispec->maximum)) + return script_int_range_error (sc, arg_index, proc_name, + ispec->minimum, ispec->maximum, v); g_value_set_uint (value, v); if (strvalue) @@ -803,8 +807,10 @@ script_fu_marshal_arg_to_value (scheme *sc, GParamSpecUChar *cspec = G_PARAM_SPEC_UCHAR (arg_spec); gint c = sc->vptr->ivalue (arg_val); - if (c < cspec->minimum || c > cspec->maximum) - return script_int_range_error (sc, arg_index, proc_name, cspec->minimum, cspec->maximum, c); + if (! (arg_spec->flags & GIMP_PARAM_NO_VALIDATE) && + (c < cspec->minimum || c > cspec->maximum)) + return script_int_range_error (sc, arg_index, proc_name, + cspec->minimum, cspec->maximum, c); g_value_set_uchar (value, c); if (strvalue) @@ -822,7 +828,8 @@ script_fu_marshal_arg_to_value (scheme *sc, GParamSpecDouble *dspec = G_PARAM_SPEC_DOUBLE (arg_spec); gdouble d = sc->vptr->rvalue (arg_val); - if (d < dspec->minimum || d > dspec->maximum) + if (! (arg_spec->flags & GIMP_PARAM_NO_VALIDATE) && + (d < dspec->minimum || d > dspec->maximum)) return script_float_range_error (sc, arg_index, proc_name, dspec->minimum, dspec->maximum, d); g_value_set_double (value, d); @@ -1716,7 +1723,8 @@ script_fu_marshal_procedure_call (scheme *sc, } debug_gvalue (&value); - if (g_param_value_validate (arg_spec, &value)) + if (! (arg_spec->flags & GIMP_PARAM_NO_VALIDATE) && + g_param_value_validate (arg_spec, &value)) { gchar error_message[1024];