Hang when searching in particular file
Open the attached file in Text Editor 46.1:
Press Ctrl+F and type any two characters into the search bar. Text Editor will hang. I got a backtrace to see what it's doing:
#0 g_ucs4_to_utf8
(str=str@entry=0x5555aa74b8c0, len=len@entry=-1, items_read=items_read@entry=0x0, items_written=items_written@entry=0x0, error=error@entry=0x0)
at ../glib/gutf8.c:1037
#1 0x00007f858d0bd121 in g_utf8_normalize
(str=str@entry=0x5555aa6cb8b0 "avyiwiqfwn7akagacgcacijianjdqagasadtw0aiaegcu8nacaakaieigkgbeknacaciarpdqagaiajtw0aiavbhgshkcaakaiiihlbanqhesahqqj0iq8gbkecdcefiavbbgshksaciaaoagxuir4gasazbiejiazbcechjcacir0dqcaakaimigkhciacib1gbeagc"..., len=len@entry=-1, mode=mode@entry=G_NORMALIZE_DEFAULT)
at ../glib/gunidecomp.c:542
#2 0x00007f858c622d2f in utf8_strcasestr
(haystack=0x5555aa64b8a0 "AvYIwIqfwN7AkAgACgCACIJIANJDQAgASADTw0AIAEgCU8NACAAKAIEIgkgBEkNACACIARPDQAgAiAJTw0AIAVBHGshKCAAKAIIIhlBAnQhESAHQQJ0IQ8gBkECdCEfIAVBBGshKSACIAAoAgxuIR4gASAZbiEjIAZBCEchJCACIR0DQCAAKAIMIgkhCiACIB1GBEAgC"..., needle=<optimized out>) at ../gtk/gtktextiter.c:4625
#3 lines_match
(start=start@entry=0x7ffefc899270, lines=lines@entry=0x5555a4795030, visible_only=visible_only@entry=1, slice=slice@entry=0, case_insensitive=case_insensitive@entry=1, match_start=match_start@entry=0x7ffefc8992c0, match_end=0x7ffefc899310) at ../gtk/gtktextiter.c:4817
#4 0x00007f858c62306f in gtk_text_iter_forward_search
(iter=iter@entry=0x7ffefc8993d0, str=str@entry=0x5555a9f8c490 "a", flags=flags@entry=(GTK_TEXT_SEARCH_VISIBLE_ONLY | GTK_TEXT_SEARCH_TEXT_ONLY | GTK_TEXT_SEARCH_CASE_INSENSITIVE), match_start=match_start@entry=0x7ffefc899520, match_end=match_end@entry=0x7ffefc8994d0, limit=limit@entry=0x7ffefc899670)
at ../gtk/gtktextiter.c:5040
#5 0x00007f858c230580 in basic_forward_search
(search=search@entry=0x5555a8408d20 [GtkSourceSearchContext], iter=iter@entry=0x7ffefc899480, match_start=match_start@entry=0x7ffefc899520, match_end=match_end@entry=0x7ffefc8994d0, limit=limit@entry=0x7ffefc899670) at ../gtksourceview/gtksourcesearchcontext.c:837
#6 0x00007f858c230c9c in scan_subregion
(search=search@entry=0x5555a8408d20 [GtkSourceSearchContext], start=start@entry=0x7ffefc899620, end=end@entry=0x7ffefc899670)
at ../gtksourceview/gtksourcesearchcontext.c:1581
#7 0x00007f858c23127e in scan_region_forward (search=0x5555a8408d20 [GtkSourceSearchContext], region=0x5555a9ef71b0 [GtkSourceRegion])
at ../gtksourceview/gtksourcesearchcontext.c:1652
#8 0x00007f858c2392bc in idle_scan_normal_search (search=0x5555a8408d20 [GtkSourceSearchContext]) at ../gtksourceview/gtksourcesearchcontext.c:1761
#9 idle_scan_cb (search=search@entry=0x5555a8408d20 [GtkSourceSearchContext]) at ../gtksourceview/gtksourcesearchcontext.c:2089
#10 0x00007f858d086dad in g_idle_dispatch (source=0x5555aa2f1730, callback=0x7f858c239160 <idle_scan_cb>, user_data=0x5555a8408d20) at ../glib/gmain.c:6150
#11 0x00007f858d08068c in g_main_dispatch (context=0x5555a26afa00) at ../glib/gmain.c:3344
#12 g_main_context_dispatch_unlocked (context=0x5555a26afa00) at ../glib/gmain.c:4152
#13 0x00007f858d0e1788 in g_main_context_iterate_unlocked.isra.0
(context=context@entry=0x5555a26afa00, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4217
#14 0x00007f858d081b03 in g_main_context_iteration (context=context@entry=0x5555a26afa00, may_block=may_block@entry=1) at ../glib/gmain.c:4282
#15 0x00007f858d2b0abd in g_application_run (application=application@entry=0x5555a2747280 [EditorApplication], argc=<optimized out>, argv=0x7ffefc899c58)
at ../gio/gapplication.c:2712
#16 0x00005555a0ff3795 in main (argc=<optimized out>, argv=<optimized out>) at ../src/main.c:107
Note this is a pretty long line:
(gdb) frame 2
#2 0x00007f858c622d2f in utf8_strcasestr (
haystack=0x5555aa64b8a0 "AvYIwIqfwN7AkAgACgCACIJIANJDQAgASADTw0AIAEgCU8NACAAKAIEIgkgBEkNACACIARPDQAgAiAJTw0AIAVBHGshKCAAKAIIIhlBAnQhESAHQQJ0IQ8gBkECdCEfIAVBBGshKSACIAAoAgxuIR4gASAZbiEjIAZBCEchJCACIR0DQCAAKAIMIgkhCiACIB1GBEAgC"..., needle=<optimized out>) at ../gtk/gtktextiter.c:4625
Downloading source file /usr/src/debug/gtk4-4.14.3-1.fc40.x86_64/redhat-linux-build/../gtk/gtktextiter.c
4625 caseless_haystack = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD);
(gdb) print (int)strlen(haystack)
$2 = 314766
I let it go for a few more seconds, then took another backtrace:
(gdb) bt
#0 0x00007f858d0b8b8f in g_utf8_strlen
(p=0x5555aa648018 "faocajqa+mv7qf3mdal6yhqdfvrqavgb+cz8rawcwaduaz8t98t4z7uhprama3lt98h4rfab+zp74v5kdal6rrqdv4iualil+839mawdgaiua7+quaf4r/vyfmamapga1anca/fe+mf5mbyidam7i/fl/urqazgd+9lcaawcuikua39elad4y/up3aamavrkfao/sfab"...,
p@entry=0x5555aa5feaf0 "lialba2oiduecdgogcianqqv0aigcadycacajqqrqigkgeecnaasliasgewohcyakia9qiqogeyamqqfqigxhdqaldaylibwgcuecdgohciaqqqrgdqige0unbsaqqqj0iqlbaceoibpba08eqanaiasgciajeashmsakia9qig0gd2oicyapaiisia9qiqogmsaraia"..., max=max@entry=-1) at ../glib/gutf8.c:243
#1 0x00007f858c622d78 in utf8_strcasestr
(haystack=0x5555aa6962e0 "LIAlBA2oiDUECdGogCiANQQV0aigCADYCACAJQQRqIgkgEEcNAAsLIAsgEWohCyAKIA9qIQogEyAMQQFqIgxHDQALDAYLIBwgCUECdGohCiAQQQRGDQIgE0UNBSAQQQJ0IQlBACEOIBpBA08EQANAIAsgCiAJEAshMSAKIA9qIg0gD2oiCyAPaiISIA9qIQogMSARaiA"..., needle=<optimized out>) at ../gtk/gtktextiter.c:4629
#2 lines_match
(start=start@entry=0x7ffefc899270, lines=lines@entry=0x5555aa5ab910, visible_only=visible_only@entry=1, slice=slice@entry=0, case_insensitive=case_insensitive@entry=1, match_start=match_start@entry=0x7ffefc8992c0, match_end=0x7ffefc899310) at ../gtk/gtktextiter.c:4817
#3 0x00007f858c62306f in gtk_text_iter_forward_search
(iter=iter@entry=0x7ffefc8993d0, str=str@entry=0x5555a9f8c490 "a", flags=flags@entry=(GTK_TEXT_SEARCH_VISIBLE_ONLY | GTK_TEXT_SEARCH_TEXT_ONLY | GTK_TEXT_SEARCH_CASE_INSENSITIVE), match_start=match_start@entry=0x7ffefc899520, match_end=match_end@entry=0x7ffefc8994d0, limit=limit@entry=0x7ffefc899670)
at ../gtk/gtktextiter.c:5040
#4 0x00007f858c230580 in basic_forward_search
(search=search@entry=0x5555a8408d20 [GtkSourceSearchContext], iter=iter@entry=0x7ffefc899480, match_start=match_start@entry=0x7ffefc899520, match_end=match_end@entry=0x7ffefc8994d0, limit=limit@entry=0x7ffefc899670) at ../gtksourceview/gtksourcesearchcontext.c:837
#5 0x00007f858c230c9c in scan_subregion
(search=search@entry=0x5555a8408d20 [GtkSourceSearchContext], start=start@entry=0x7ffefc899620, end=end@entry=0x7ffefc899670)
at ../gtksourceview/gtksourcesearchcontext.c:1581
#6 0x00007f858c23127e in scan_region_forward (search=0x5555a8408d20 [GtkSourceSearchContext], region=0x5555a9ef71b0 [GtkSourceRegion])
at ../gtksourceview/gtksourcesearchcontext.c:1652
#7 0x00007f858c2392bc in idle_scan_normal_search (search=0x5555a8408d20 [GtkSourceSearchContext]) at ../gtksourceview/gtksourcesearchcontext.c:1761
#8 idle_scan_cb (search=search@entry=0x5555a8408d20 [GtkSourceSearchContext]) at ../gtksourceview/gtksourcesearchcontext.c:2089
#9 0x00007f858d086dad in g_idle_dispatch (source=0x5555aa2f1730, callback=0x7f858c239160 <idle_scan_cb>, user_data=0x5555a8408d20) at ../glib/gmain.c:6150
#10 0x00007f858d08068c in g_main_dispatch (context=0x5555a26afa00) at ../glib/gmain.c:3344
#11 g_main_context_dispatch_unlocked (context=0x5555a26afa00) at ../glib/gmain.c:4152
#12 0x00007f858d0e1788 in g_main_context_iterate_unlocked.isra.0
(context=context@entry=0x5555a26afa00, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4217
#13 0x00007f858d081b03 in g_main_context_iteration (context=context@entry=0x5555a26afa00, may_block=may_block@entry=1) at ../glib/gmain.c:4282
#14 0x00007f858d2b0abd in g_application_run (application=application@entry=0x5555a2747280 [EditorApplication], argc=<optimized out>, argv=0x7ffefc899c58)
at ../gio/gapplication.c:2712
#15 0x00005555a0ff3795 in main (argc=<optimized out>, argv=<optimized out>) at ../src/main.c:107
So the gtk_text_iter_forward_search() is making progress and doesn't seem to be completely stuck, but is also very slow and blocking the UI thread.