Hello,
just tried to reproduce this issue.



This is the stack were the process crashes:


Thread 1 "gmic_gimp" received signal SIGSEGV, Segmentation fault.
__strlen_sse2 () at ../sysdeps/x86_64/multiarch/../strlen.S:120
120     ../sysdeps/x86_64/multiarch/../strlen.S: Datei oder Verzeichnis nicht 
gefunden.
(gdb) bt
#0  __strlen_sse2 () at ../sysdeps/x86_64/multiarch/../strlen.S:120
#1  0x00007f8ef92449b6 in printf_positional (s=s@entry=0x7ffdde9629c0, 
format=format@entry=0x55592598b438 "mode(%s),opacity(%g),pos(%d,%d),name(%s)", 
readonly_format=readonly_format@entry=0, ap=ap@entry=0x7ffdde962b30, 
ap_savep=ap_savep@entry=0x7ffdde962568, done=done@entry=5, nspecs_done=0, 
lead_str_end=<optimized out>, work_buffer=<optimized out>, 
save_errno=<optimized out>, grouping=<optimized out>, thousands_sep=<optimized 
out>) at vfprintf.c:2023
#2  0x00007f8ef9246db2 in _IO_vfprintf_internal (s=s@entry=0x7ffdde9629c0, 
format=format@entry=0x55592598b438 "mode(%s),opacity(%g),pos(%d,%d),name(%s)", 
ap=ap@entry=0x7ffdde962b30) at vfprintf.c:1688
#3  0x00007f8ef926ea60 in _IO_vsnprintf (string=0x5559266914f0 "mode(U", 
maxlen=<optimized out>, format=0x55592598b438 
"mode(%s),opacity(%g),pos(%d,%d),name(%s)", args=args@entry=0x7ffdde962b30) at 
vsnprintf.c:114
#4  0x00007f8ef924e02f in __GI___snprintf (s=<optimized out>, maxlen=<optimized 
out>, format=<optimized out>) at snprintf.c:33
#5  0x00005559254a5077 in process_preview () at gmic_gimp.cpp:3259
#6  0x00007f8efaba1f6d in g_closure_invoke (closure=0x555926a0cac0, 
return_value=0x0, n_param_values=1, param_values=0x7ffdde963330, 
invocation_hint=0x7ffdde9632b0) at ../../../../gobject/gclosure.c:804
#7  0x00007f8efabb4d3e in signal_emit_unlocked_R 
(node=node@entry=0x555926912a40, detail=detail@entry=0, 
instance=instance@entry=0x555926783e80, 
emission_return=emission_return@entry=0x0, 
instance_and_params=instance_and_params@entry=0x7ffdde963330) at 
../../../../gobject/gsignal.c:3635
#8  0x00007f8efabbd3f5 in g_signal_emit_valist (instance=<optimized out>, 
signal_id=<optimized out>, detail=<optimized out>, 
var_args=var_args@entry=0x7ffdde9634f0) at ../../../../gobject/gsignal.c:3391
#9  0x00007f8efabbde0f in g_signal_emit 
(instance=instance@entry=0x555926783e80, signal_id=<optimized out>, 
detail=detail@entry=0) at ../../../../gobject/gsignal.c:3447
#10 0x00007f8efd31db8f in gimp_preview_invalidate_now (preview=0x555926783e80, 
preview@entry=<error reading variable: value has been optimized out>) at 
gimppreview.c:503
#11 0x00007f8efa8c8b73 in g_timeout_dispatch 
(source=source@entry=0x5559268628b0, callback=<optimized out>, 
user_data=<optimized out>) at ../../../../glib/gmain.c:4650
#12 0x00007f8efa8c80f5 in g_main_dispatch (context=0x55592653e460) at 
../../../../glib/gmain.c:3177
#13 g_main_context_dispatch (context=context@entry=0x55592653e460) at 
../../../../glib/gmain.c:3830
#14 0x00007f8efa8c84c0 in g_main_context_iterate (context=0x55592653e460, 
block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at 
../../../../glib/gmain.c:3903
#15 0x00007f8efa8c87d2 in g_main_loop_run (loop=0x5559266f9ce0) at 
../../../../glib/gmain.c:4099
#16 0x00007f8efb7a3987 in IA__gtk_main () at ./gtk/gtkmain.c:1270
#17 0x00005559254a9171 in gmic_main () at gmic_gimp.cpp:4336
#18 0x00005559254af6d7 in gmic_run (name=<optimized out>, nparams=<optimized 
out>, param=<optimized out>, nreturn_vals=<optimized out>, 
return_vals=<optimized out>) at gmic_gimp.cpp:4425
#19 0x00007f8efce93418 in gimp_proc_run (proc_run=0x55592652e740) at gimp.c:2401
#20 gimp_loop () at gimp.c:2227
#21 gimp_main (info=<optimized out>, argc=<optimized out>, argv=<optimized 
out>) at gimp.c:671
#22 0x00007f8ef9219b17 in __libc_start_main (main=0x5559254920a0 <main(int, 
char**)>, argc=6, argv=0x7ffdde963b38, init=<optimized out>, fini=<optimized 
out>, rtld_fini=<optimized out>, stack_end=0x7ffdde963b28) at 
../csu/libc-start.c:310
#23 0x000055592549238a in _start ()



(gdb) list
...
3192    void process_preview() {
...
3249            const GimpLayerModeEffects blendmode = 
gimp_layer_get_mode(*layers);
...
3259            
cimg_snprintf(layer_name,layer_name.width(),"mode(%s),opacity(%g),pos(%d,%d),name(%s)",
3260                          s_blendmode[blendmode],opacity,ox,oy,
3261                          _layer_name.data());



(gdb) list gimp_layer_get_mode

1106    GimpLayerMode
1107    gimp_layer_get_mode (gint32 layer_ID)
1108    {
1109      GimpParam *return_vals;
1110      gint nreturn_vals;
1111      GimpLayerMode mode = 0;
1112
1113      return_vals = gimp_run_procedure ("gimp-layer-get-mode",
1114                                        &nreturn_vals,
1115                                        GIMP_PDB_LAYER, layer_ID,
1116                                        GIMP_PDB_END);
1117
1118      if (return_vals[0].data.d_status == GIMP_PDB_SUCCESS)
1119        mode = return_vals[1].data.d_int32;
1120
1121      gimp_destroy_params (return_vals, nreturn_vals);
1122
1123      return mode;
1124    }



Variable s_blendmode contains 0x17 strings like "alpha", "dissolve", "behind"...
Variable blendmode is retrieved by gimp_layer_get_mode and looks like it has a
value of GIMP_LAYER_MODE_NORMAL == 0x1c.
Therefore memory after s_blendmode is accessed.

It looks like gimp-gmic and libgimp2.0 disagree on the layer mode constants.
Possibly gimp-gmic expects GIMP_LAYER_MODE_NORMAL_LEGACY.
libgimp2.0 returns GIMP_LAYER_MODE_NORMAL.


Kind regards,
Bernhard

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=906658
https://sourceforge.net/projects/gmic/support
https://gmic.eu/download.shtml
https://framagit.org/dtschump/gmic/issues




apt update
apt install xserver-xorg sddm openbox xterm psmisc systemd-coredump dpkg-dev 
devscripts gdb gimp gimp-gmic gimp-gmic-dbgsym libglib2.0-0-dbgsym 
libgimp2.0-dbgsym libgtk2.0-0-dbgsym
apt build-dep gimp-gmic


mkdir -p gimp-gmic/orig
cd       gimp-gmic/orig
apt source gimp-gmic
cd

mkdir -p libgimp-2.0/orig
cd       libgimp-2.0/orig
apt source libgimp2.0
cd


export DISPLAY=:0
gimp /usr/share/desktop-base/lines-theme/login/sddm-preview.jpg

# open G'MIC filters dialog




gdb -q --pid $(pgrep gmic_gimp)

set height 0
set width 0
set pagination off
directory /home/benutzer/gimp-gmic/orig/gmic-1.7.9+zart/src
directory /home/benutzer/libgimp-2.0/orig/gimp-2.10.2/libgimp
b process_preview
b gmic_gimp.cpp:3249
display mode
cont




Thread 1 "gmic_gimp" received signal SIGSEGV, Segmentation fault.
__strlen_sse2 () at ../sysdeps/x86_64/multiarch/../strlen.S:120
120     ../sysdeps/x86_64/multiarch/../strlen.S: Datei oder Verzeichnis nicht 
gefunden.
(gdb) bt
#0  __strlen_sse2 () at ../sysdeps/x86_64/multiarch/../strlen.S:120
#1  0x00007f7b3ba029b6 in printf_positional (s=s@entry=0x7ffe4f2a6960, 
format=format@entry=0x562857458438 "mode(%s),opacity(%g),pos(%d,%d),name(%s)", 
readonly_format=readonly_format@entry=0, ap=ap@entry=0x7ffe4f2a6ad0, 
ap_savep=ap_savep@entry=0x7ffe4f2a6508, done=done@entry=5, nspecs_done=0, 
lead_str_end=<optimized out>, work_buffer=<optimized out>, 
save_errno=<optimized out>, grouping=<optimized out>, thousands_sep=<optimized 
out>) at vfprintf.c:2023
#2  0x00007f7b3ba04db2 in _IO_vfprintf_internal (s=s@entry=0x7ffe4f2a6960, 
format=format@entry=0x562857458438 "mode(%s),opacity(%g),pos(%d,%d),name(%s)", 
ap=ap@entry=0x7ffe4f2a6ad0) at vfprintf.c:1688
#3  0x00007f7b3ba2ca60 in _IO_vsnprintf (string=0x56285849eef0 "mode(V", 
maxlen=<optimized out>, format=0x562857458438 
"mode(%s),opacity(%g),pos(%d,%d),name(%s)", args=args@entry=0x7ffe4f2a6ad0) at 
vsnprintf.c:114
#4  0x00007f7b3ba0c02f in __GI___snprintf (s=<optimized out>, maxlen=<optimized 
out>, format=<optimized out>) at snprintf.c:33
#5  0x0000562856f72077 in process_preview() ()
#6  0x00007f7b3d35ff6d in g_closure_invoke () from 
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#7  0x00007f7b3d372d3e in ?? () from 
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#8  0x00007f7b3d37b3f5 in g_signal_emit_valist () from 
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#9  0x00007f7b3d37be0f in g_signal_emit () from 
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#10 0x00007f7b3fadbb8f in ?? () from /usr/lib/libgimpwidgets-2.0.so.0
#11 0x00007f7b3d086b73 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#12 0x00007f7b3d0860f5 in g_main_context_dispatch () from 
/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#13 0x00007f7b3d0864c0 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#14 0x00007f7b3d0867d2 in g_main_loop_run () from 
/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#15 0x00007f7b3df61987 in gtk_main () from 
/usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#16 0x0000562856f76171 in gmic_main() ()
#17 0x0000562856f7c6d7 in gmic_run(char const*, int, _GimpParam const*, int*, 
_GimpParam**) ()
#18 0x00007f7b3f651418 in gimp_main () from /usr/lib/libgimp-2.0.so.0
#19 0x00007f7b3b9d7b17 in __libc_start_main (main=0x562856f5f0a0 <main>, 
argc=6, argv=0x7ffe4f2a7ad8, init=<optimized out>, fini=<optimized out>, 
rtld_fini=<optimized out>, stack_end=0x7ffe4f2a7ac8) at ../csu/libc-start.c:310
#20 0x0000562856f5f38a in _start ()




# With debug symbols

Thread 1 "gmic_gimp" received signal SIGSEGV, Segmentation fault.
__strlen_sse2 () at ../sysdeps/x86_64/multiarch/../strlen.S:120
120     ../sysdeps/x86_64/multiarch/../strlen.S: Datei oder Verzeichnis nicht 
gefunden.
(gdb) bt
#0  __strlen_sse2 () at ../sysdeps/x86_64/multiarch/../strlen.S:120
#1  0x00007f8ef92449b6 in printf_positional (s=s@entry=0x7ffdde9629c0, 
format=format@entry=0x55592598b438 "mode(%s),opacity(%g),pos(%d,%d),name(%s)", 
readonly_format=readonly_format@entry=0, ap=ap@entry=0x7ffdde962b30, 
ap_savep=ap_savep@entry=0x7ffdde962568, done=done@entry=5, nspecs_done=0, 
lead_str_end=<optimized out>, work_buffer=<optimized out>, 
save_errno=<optimized out>, grouping=<optimized out>, thousands_sep=<optimized 
out>) at vfprintf.c:2023
#2  0x00007f8ef9246db2 in _IO_vfprintf_internal (s=s@entry=0x7ffdde9629c0, 
format=format@entry=0x55592598b438 "mode(%s),opacity(%g),pos(%d,%d),name(%s)", 
ap=ap@entry=0x7ffdde962b30) at vfprintf.c:1688
#3  0x00007f8ef926ea60 in _IO_vsnprintf (string=0x5559266914f0 "mode(U", 
maxlen=<optimized out>, format=0x55592598b438 
"mode(%s),opacity(%g),pos(%d,%d),name(%s)", args=args@entry=0x7ffdde962b30) at 
vsnprintf.c:114
#4  0x00007f8ef924e02f in __GI___snprintf (s=<optimized out>, maxlen=<optimized 
out>, format=<optimized out>) at snprintf.c:33
#5  0x00005559254a5077 in process_preview () at gmic_gimp.cpp:3259
#6  0x00007f8efaba1f6d in g_closure_invoke (closure=0x555926a0cac0, 
return_value=0x0, n_param_values=1, param_values=0x7ffdde963330, 
invocation_hint=0x7ffdde9632b0) at ../../../../gobject/gclosure.c:804
#7  0x00007f8efabb4d3e in signal_emit_unlocked_R 
(node=node@entry=0x555926912a40, detail=detail@entry=0, 
instance=instance@entry=0x555926783e80, 
emission_return=emission_return@entry=0x0, 
instance_and_params=instance_and_params@entry=0x7ffdde963330) at 
../../../../gobject/gsignal.c:3635
#8  0x00007f8efabbd3f5 in g_signal_emit_valist (instance=<optimized out>, 
signal_id=<optimized out>, detail=<optimized out>, 
var_args=var_args@entry=0x7ffdde9634f0) at ../../../../gobject/gsignal.c:3391
#9  0x00007f8efabbde0f in g_signal_emit 
(instance=instance@entry=0x555926783e80, signal_id=<optimized out>, 
detail=detail@entry=0) at ../../../../gobject/gsignal.c:3447
#10 0x00007f8efd31db8f in gimp_preview_invalidate_now (preview=0x555926783e80, 
preview@entry=<error reading variable: value has been optimized out>) at 
gimppreview.c:503
#11 0x00007f8efa8c8b73 in g_timeout_dispatch 
(source=source@entry=0x5559268628b0, callback=<optimized out>, 
user_data=<optimized out>) at ../../../../glib/gmain.c:4650
#12 0x00007f8efa8c80f5 in g_main_dispatch (context=0x55592653e460) at 
../../../../glib/gmain.c:3177
#13 g_main_context_dispatch (context=context@entry=0x55592653e460) at 
../../../../glib/gmain.c:3830
#14 0x00007f8efa8c84c0 in g_main_context_iterate (context=0x55592653e460, 
block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at 
../../../../glib/gmain.c:3903
#15 0x00007f8efa8c87d2 in g_main_loop_run (loop=0x5559266f9ce0) at 
../../../../glib/gmain.c:4099
#16 0x00007f8efb7a3987 in IA__gtk_main () at ./gtk/gtkmain.c:1270
#17 0x00005559254a9171 in gmic_main () at gmic_gimp.cpp:4336
#18 0x00005559254af6d7 in gmic_run (name=<optimized out>, nparams=<optimized 
out>, param=<optimized out>, nreturn_vals=<optimized out>, 
return_vals=<optimized out>) at gmic_gimp.cpp:4425
#19 0x00007f8efce93418 in gimp_proc_run (proc_run=0x55592652e740) at gimp.c:2401
#20 gimp_loop () at gimp.c:2227
#21 gimp_main (info=<optimized out>, argc=<optimized out>, argv=<optimized 
out>) at gimp.c:671
#22 0x00007f8ef9219b17 in __libc_start_main (main=0x5559254920a0 <main(int, 
char**)>, argc=6, argv=0x7ffdde963b38, init=<optimized out>, fini=<optimized 
out>, rtld_fini=<optimized out>, stack_end=0x7ffdde963b28) at 
../csu/libc-start.c:310
#23 0x000055592549238a in _start ()


(gdb) list
...
3192    void process_preview() {
...
3249            const GimpLayerModeEffects blendmode = 
gimp_layer_get_mode(*layers);
...
3259            
cimg_snprintf(layer_name,layer_name.width(),"mode(%s),opacity(%g),pos(%d,%d),name(%s)",
3260                          s_blendmode[blendmode],opacity,ox,oy,
3261                          _layer_name.data());




(gdb) list gimp_layer_get_mode

1106    GimpLayerMode
1107    gimp_layer_get_mode (gint32 layer_ID)
1108    {
1109      GimpParam *return_vals;
1110      gint nreturn_vals;
1111      GimpLayerMode mode = 0;
1112
1113      return_vals = gimp_run_procedure ("gimp-layer-get-mode",
1114                                        &nreturn_vals,
1115                                        GIMP_PDB_LAYER, layer_ID,
1116                                        GIMP_PDB_END);
1117
1118      if (return_vals[0].data.d_status == GIMP_PDB_SUCCESS)
1119        mode = return_vals[1].data.d_int32;
1120
1121      gimp_destroy_params (return_vals, nreturn_vals);
1122
1123      return mode;
1124    }





(gdb) print blendmode
$2 = <optimized out>
(gdb) print s_blendmode
$3 = {0x55592597282e "alpha", 0x555925972834 "dissolve", 0x555925974e64 
"behind", 0x555925972852 "multiply", 0x5559259f370a "screen", 0x555925972860 
"overlay", 0x55592597287c "difference", 0x555925974b28 "add", 0x555925972887 
"subtract", 0x55592597284b "darken", 0x55592597283d "lighten", 0x5559259728af 
"hue", 0x5559259728b3 "saturation", 0x5559259728be "color", 0x5559259728c4 
"value", 0x5559259728a8 "divide", 0x555925972845 "dodge", 0x55592597285b 
"burn", 0x555925972872 "hardlight", 0x555925972868 "softlight", 0x555925972890 
"grainextract", 0x55592597289d "grainmerge", 0x555925974e6b "colorerase"}
(gdb) print opacity
$4 = 100
(gdb) print *layers
$5 = 2


# Restarted and stop here:
(gdb) down
#0  gimp_layer_get_mode (layer_ID=2) at gimplayer_pdb.c:1108

(gdb) print mode
$5 = GIMP_LAYER_MODE_NORMAL
(gdb) print/x mode
$6 = 0x1c

(gdb) print s_blendmode
$7 = {0x556961e8c82e "alpha", 0x556961e8c834 "dissolve", 0x556961e8ee64 
"behind", 0x556961e8c852 "multiply", 0x556961f0d70a "screen", 0x556961e8c860 
"overlay", 0x556961e8c87c "difference", 0x556961e8eb28 "add", 0x556961e8c887 
"subtract", 0x556961e8c84b "darken", 0x556961e8c83d "lighten", 0x556961e8c8af 
"hue", 0x556961e8c8b3 "saturation", 0x556961e8c8be "color", 0x556961e8c8c4 
"value", 0x556961e8c8a8 "divide", 0x556961e8c845 "dodge", 0x556961e8c85b 
"burn", 0x556961e8c872 "hardlight", 0x556961e8c868 "softlight", 0x556961e8c890 
"grainextract", 0x556961e8c89d "grainmerge", 0x556961e8ee6b "colorerase"}
(gdb) print s_blendmode[0x1c]
$8 = 0x8000000080000000 <error: Cannot access memory at address 
0x8000000080000000>

(gdb) print sizeof(s_blendmode)/sizeof(*s_blendmode)
$9 = 23
(gdb) print/x sizeof(s_blendmode)/sizeof(*s_blendmode)
$10 = 0x17

Reply via email to