crash when saving an xcf via Script-Fu, if an NDE is active
Environment/Versions
- GIMP version: 2.99.19 commit f3711e97
- Package: self-build
- Operating System: Linux Mint, X11
Description of the bug
GIMP crashes when saving if an operation is in progress, usually the warp, but has also done so during painting. This is happening when I use an autosave plug-in. Granted, it was always surprising that it worked reliably with its random saving at any point. But it did. Not so much now. Anyhow, this bug also is reproducible with a one line Script-Fu save from the command line..
Reproduction
Is the bug reproducible? Always
Reproduction steps:
- Start GIMP and create a new image
- Perform an operation that creates an NDE fx, Warp, Hue Adjust, Gradient Fill...
- In the Script-Fu console enter the following command
- (gimp-xcf-save 0 1 "test")
- Crash
…
Expected result: Saves file
Actual result: Crash
Additional information
Thread 1 "gimp-2.99" received signal SIGSEGV, Segmentation fault.
0x00007ffff7976434 in g_str_hash () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
(gdb) bt full
#0 0x00007ffff7976434 in g_str_hash () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#1 0x00007ffff797719a in g_hash_table_lookup () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2 0x00007ffff78ae388 in gegl_operation_gtype_from_name (name=0x0) at ../gegl/operation/gegl-operations.c:295
latest_serial = 1725
Python Exception <class 'gdb.error'>: No type named TypeNode.
type =
#3 0x00007ffff78abd36 in gegl_operation_list_properties (operation_type=0x0, n_properties_p=0x7fffffffd5b4) at ../gegl/operation/gegl-operation.c:477
pspecs = 0x55555cd25b10
Python Exception <class 'gdb.error'>: No type named TypeNode.
type =
klass = 0x55555cdbaa50
#4 0x00005555559812b8 in xcf_save_effect_props (info=0x7fffffffd8d0, image=0x55555d185670, filter=0x55555cdbaa50, error=0x7fffffffd878)
at ../app/xcf/xcf-save.c:867
pspecs = 0x7fffffffd620
n_pspecs = 0
node = 0x55555cdf8620
operation = 0x0
#5 0x00005555559874fc in xcf_save_effect (info=0x7fffffffd8d0, image=0x55555d185670, filter=0x55555cdbaa50, error=0x7fffffffd878)
at ../app/xcf/xcf-save.c:2128
name = 0x55555cbfa0c0 "\300n\b]UU"
icon = 0x55555d086ed0 "@\016\364[UU"
filter_drawable = 0x55555cdbaa50
node = 0x55555cdf8620
operation = 0x0
effect_mask = 0x7fffffffd760
offset = 1
tmp_error = 0x0
#6 0x000055555598700c in xcf_save_layer (info=0x7fffffffd8d0, image=0x55555d185670, layer=0x55555cfc6460, error=0x7fffffffd878) at ../app/xcf/xcf-save.c:2030
filter = 0x55555cdbaa50
saved_pos = 1830030
offset = 2035022
value = 0
string = 0x55555bfa8450 "Background"
filters = 0x55555d006d70
filter_list = 0x0
num_effects = 1
list = 0x55555c9e08c0 = {0x55555cdbaa50}
tmp_error = 0x0
#7 0x000055555597f106 in xcf_save_image (info=0x7fffffffd8d0, image=0x55555d185670, error=0x7fffffffd878) at ../app/xcf/xcf-save.c:393
layer = 0x55555cfc6460
all_layers = 0x55555636ce40 = {0x55555cfc6460}
all_channels = 0x0
all_paths = 0x0
list = 0x55555636ce40 = {0x55555cfc6460}
saved_pos = 1829731
offset = 1829755
value = 250
n_layers = 1
n_channels = 0
--Type <RET> for more, q to quit, c to continue without paging--
n_paths = 0
progress = 1
max_progress = 2
version_tag = "gimp xcf v020\000\000"
write_paths = 1
tmp_error = 0x0
#8 0x0000555555973218 in xcf_save_stream
(gimp=0x5555563900a0, image=0x55555d185670, output=0x7fffc8007b70, output_file=0x7fff6c006860, progress=0x55555a9b7380, error=0x7fffffffdc68)
at ../app/xcf/xcf.c:369
info = {gimp = 0x5555563900a0, progress = 0x55555a9b7380, input = 0x0, output = 0x7fffc8007b70, seekable = 0x7fffc8007b70, cp = 2035160, bytes_per_offset = 8, file = 0x7fff6c006860, tattoo_state = 0, selected_layers = 0x0, selected_channels = 0x0, selected_vectors = 0x0, linked_layers = 0x0, linked_channels = 0x0, linked_paths = 0x0, layer_sets = 0x0, channel_sets = 0x0, floating_sel_drawable = 0x0, floating_sel = 0x0, floating_sel_offset = 0, compression = COMPRESS_RLE, file_version = 20}
filename = 0x55555c094bd0 "/home/mark/etss"
success = 0
my_error = 0x0
cancellable = 0x7fffc8007b70
__func__ = "xcf_save_stream"
#9 0x00005555559735bd in xcf_save_invoker
(procedure=0x5555563a6160, gimp=0x5555563900a0, context=0x55555c947880, progress=0x55555a9b7380, args=0x55555cb13a00, error=0x7fffffffdc68)
at ../app/xcf/xcf.c:474
return_vals = 0x300000004
image = 0x55555d185670
file = 0x7fff6c006860
output = 0x7fffc8007b70
success = 0
my_error = 0x0
#10 0x0000555555925849 in gimp_procedure_real_execute
(procedure=0x5555563a6160, gimp=0x5555563900a0, context=0x55555c947880, progress=0x55555a9b7380, args=0x55555cb13a00, error=0x7fffffffdc68)
at ../app/pdb/gimpprocedure.c:246
__func__ = "gimp_procedure_real_execute"
#11 0x0000555555938ba9 in gimp_plug_in_procedure_execute
(procedure=0x5555563a6160, gimp=0x5555563900a0, context=0x55555c947880, progress=0x55555a9b7380, args=0x55555cb13a00, error=0x7fffffffdc68)
at ../app/plug-in/gimppluginprocedure.c:390
plug_in_procedure = 0x5555563a6160
pdb_error = 0x0
#12 0x0000555555926a0b in gimp_procedure_execute
(procedure=0x5555563a6160, gimp=0x5555563900a0, context=0x55555c947880, progress=0x55555a9b7380, args=0x55555cb13a00, error=0x7fffffffdc68)
at ../app/pdb/gimpprocedure.c:515
return_vals = 0x555556015600
pdb_error = 0x0
__func__ = "gimp_procedure_execute"
#13 0x00005555559226b1 in gimp_pdb_execute_procedure_by_name_args
(pdb=0x555556261ec0, context=0x55555c947880, progress=0x55555a9b7380, error=0x7fffffffdc68, name=0x55555c8fe9f0 "gimp-xcf-save", args=0x55555cb13a00)
at ../app/pdb/gimppdb.c:320
procedure = 0x5555563a6160
--Type <RET> for more, q to quit, c to continue without paging--
return_vals = 0x0
list = 0x55555627d320 = {0x5555563a6160}
__func__ = "gimp_pdb_execute_procedure_by_name_args"
#14 0x0000555555949145 in gimp_plug_in_handle_proc_run (plug_in=0x55555ada2380, proc_run=0x55555c9d3760) at ../app/plug-in/gimpplugin-message.c:584
proc_frame = 0x55555ada25f8
canonical = 0x55555c8fe9f0 "gimp-xcf-save"
proc_name = 0x55555c8fe9f0 "gimp-xcf-save"
procedure = 0x5555563a6160
args = 0x55555cb13a00
return_vals = 0x0
error = 0x0
__func__ = "gimp_plug_in_handle_proc_run"
#15 0x0000555555947e24 in gimp_plug_in_handle_message (plug_in=0x55555ada2380, msg=0x7fffffffdd70) at ../app/plug-in/gimpplugin-message.c:128
__func__ = "gimp_plug_in_handle_message"
#16 0x000055555592d784 in gimp_plug_in_recv_message (channel=0x55555ce5f140, cond=G_IO_IN, data=0x55555ada2380) at ../app/plug-in/gimpplugin.c:213
msg = {type = 5, data = 0x55555c9d3760}
plug_in = 0x55555ada2380
got_message = 0
#17 0x00007ffff7993c44 in g_main_context_dispatch () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#18 0x00007ffff79e92b8 in () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#19 0x00007ffff79913e3 in g_main_context_iteration () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#20 0x00007ffff76cefb5 in g_application_run () at /lib/x86_64-linux-gnu/libgio-2.0.so.0
#21 0x000055555599e38f in app_run
(full_prog_name=0x555555fe86d0 "/home/mark/Code/gimp-source/bin/gimp-2.99", filenames=0x0, alternate_system_gimprc=0x0, alternate_gimprc=0x0, session_name=0x0, batch_interpreter=0x0, batch_commands=0x0, quit=0, as_new=0, no_interface=0, no_data=0, no_fonts=0, no_splash=1, be_verbose=1, use_shm=1, use_cpu_accel=1, console_messages=1, use_debug_handler=0, show_playground=1, show_debug_menu=1, stack_trace_mode=GIMP_STACK_TRACE_QUERY, pdb_compat_mode=GIMP_PDB_COMPAT_WARN, backtrace_file=0x555555fdcd80 "/home/mark/.config/GIMP/2.99/CrashLog/gimp-crash-1715621378.txt") at ../app/app.c:317
gimp = 0x5555563900a0
app = 0x5555563ac0f0
default_folder = 0x0
gimpdir = 0x555556219e80
abort_message = 0x0
retval = 0
__func__ = "app_run"
#22 0x00005555556b513f in main (argc=4, argv=0x555555fe89e0) at ../app/main.c:786
context = 0x555555fe8aa0
error = 0x0
abort_message = 0x0
basename = 0x555555fe8a10 "0\212\376UUU"
system_gimprc_file = 0x0
user_gimprc_file = 0x0
gimp_group = 0x555555fe9170
backtrace_file = 0x555555fdcd80 "/home/mark/.config/GIMP/2.99/CrashLog/gimp-crash-1715621378.txt"
retval = 0
i = 4
(gdb)
(script-fu:112495): LibGimpBase-WARNING **: 18:31:34.362: script-fu: gimp_wire_read(): unexpected EOF
(script-fu:112367): LibGimpBase-WARNING **: 18:31:34.362: script-fu: gimp_wire_read(): unexpected EOF
Edited by Mark Sweeney