• Stephan Bergmann's avatar
    GTK3: Make code robust against XAccessibleText::getCaretPosition returning -1 · c3be7739
    Stephan Bergmann yazdı
    ...which I've seen once cause the assert in rtl_uString_newFromSubString to fire
    when entering text ("foo") on a slide in Impress, see below.
    
    What also looks suspicious, though, is that both
    AccessibleEditableTextPara::getCaretPosition and
    AccessibleEditableTextPara::getText
    (editeng/source/accessibility/AccessibleEditableTextPara.cxx) each lock the
    SolarMutex first thing in their bodies, but from the below backtrace
    GtkSalFrame::IMHandler::signalIMRetrieveSurrounding appears to be called with
    SolarMutex not locked, so it smells like there could be a race and the call to
    getCaretPosition return a value unrelated to the value returned by the following
    call to getText.
    
    > #52 0x00007f4ae5e0e9f6 in __GI___assert_fail (assertion=0x7f4ae62ad22b "false", file=0x7f4ae62a026b "/data/sbergman/lo-clang2/core/sal/rtl/strtmpl.cxx", line=1378, function=0x7f4ae62a35e7 "void rtl_uString_newFromSubString(rtl_uString **, const rtl_uString *, sal_Int32, sal_Int32)") at /usr/src/debug/glibc-2.28/assert/assert.c:101
    > #53 0x00007f4ae6255157 in rtl_uString_newFromSubString(rtl_uString**, rtl_uString const*, sal_Int32, sal_Int32) (ppThis=0x7ffe871c1cd0, pFrom=0x15b24ed0, beginIndex=0, count=-1) at /data/sbergman/lo-clang2/core/sal/rtl/strtmpl.cxx:1378
    > #54 0x00007f4acabc861b in rtl::OUString::copy(int, int) const (this=0x7ffe871c1d88, beginIndex=0, count=-1) at /data/sbergman/lo-clang2/core/include/rtl/ustring.hxx:2221
    > #55 0x00007f4acac98dea in GtkSalFrame::IMHandler::signalIMRetrieveSurrounding(_GtkIMContext*, void*) (pContext=0xe188f20) at /data/sbergman/lo-clang2/core/vcl/unx/gtk3/gtk3gtkframe.cxx:4260
    > #60 0x00007f4ad94dbe04 in <emit signal 0x7f4aca793890 "retrieve-surrounding" on instance ???> (instance=0xe188f20, detailed_signal=detailed_signal@entry=0x7f4aca793890 "retrieve-surrounding") at /usr/src/debug/glib2-2.58.1-1.fc29.x86_64/gobject/gsignal.c:3487
    >     #56 0x00007f4aca75d206 in _gtk_marshal_BOOLEAN__VOID (closure=0x1594ccd0, return_value=0x7ffe871c1f40, n_param_values=<optimized out>, param_values=<optimized out>, invocation_hint=<optimized out>, marshal_data=<optimized out>) at /usr/src/debug/gtk3-3.24.1-1.fc29.x86_64/gtk/gtkmarshalers.c:1901
    >     #57 0x00007f4ad94bec9d in g_closure_invoke (closure=0x1594ccd0, return_value=0x7ffe871c1f40, n_param_values=1, param_values=0x7ffe871c1fa0, invocation_hint=0x7ffe871c1f20) at /usr/src/debug/glib2-2.58.1-1.fc29.x86_64/gobject/gclosure.c:810
    >     #58 0x00007f4ad94d2203 in signal_emit_unlocked_R (node=node@entry=0x374ea40, detail=detail@entry=0, instance=instance@entry=0xe188f20, emission_return=emission_return@entry=0x7ffe871c20b0, instance_and_params=instance_and_params@entry=0x7ffe871c1fa0) at /usr/src/debug/glib2-2.58.1-1.fc29.x86_64/gobject/gsignal.c:3635
    >     #59 0x00007f4ad94da9a3 in g_signal_emit_valist (instance=instance@entry=0xe188f20, signal_id=signal_id@entry=255, detail=detail@entry=0, var_args=var_args@entry=0x7ffe871c21a8) at /usr/src/debug/glib2-2.58.1-1.fc29.x86_64/gobject/gsignal.c:3401
    > #61 0x00007f4aca5a55dc in gtk_im_multicontext_retrieve_surrounding_cb (slave=slave@entry=0x367b5f0, multicontext=<optimized out>) at /usr/src/debug/gtk3-3.24.1-1.fc29.x86_64/gtk/gtkimmulticontext.c:532
    > #66 0x00007f4ad94dbe04 in <emit signal 0x7f4aca793890 "retrieve-surrounding" on instance ???> (instance=0x367b5f0, detailed_signal=detailed_signal@entry=0x7f4aca793890 "retrieve-surrounding") at /usr/src/debug/glib2-2.58.1-1.fc29.x86_64/gobject/gsignal.c:3487
    >     #62 0x00007f4aca75d206 in _gtk_marshal_BOOLEAN__VOID (closure=0x15949020, return_value=0x7ffe871c2490, n_param_values=<optimized out>, param_values=<optimized out>, invocation_hint=<optimized out>, marshal_data=<optimized out>) at /usr/src/debug/gtk3-3.24.1-1.fc29.x86_64/gtk/gtkmarshalers.c:1901
    >     #63 0x00007f4ad94bec9d in g_closure_invoke (closure=0x15949020, return_value=0x7ffe871c2490, n_param_values=1, param_values=0x7ffe871c24f0, invocation_hint=0x7ffe871c2470) at /usr/src/debug/glib2-2.58.1-1.fc29.x86_64/gobject/gclosure.c:810
    >     #64 0x00007f4ad94d2203 in signal_emit_unlocked_R (node=node@entry=0x374ea40, detail=detail@entry=0, instance=instance@entry=0x367b5f0, emission_return=emission_return@entry=0x7ffe871c2600, instance_and_params=instance_and_params@entry=0x7ffe871c24f0) at /usr/src/debug/glib2-2.58.1-1.fc29.x86_64/gobject/gsignal.c:3635
    >     #65 0x00007f4ad94da9a3 in g_signal_emit_valist (instance=instance@entry=0x367b5f0, signal_id=signal_id@entry=255, detail=detail@entry=0, var_args=var_args@entry=0x7ffe871c26f8) at /usr/src/debug/glib2-2.58.1-1.fc29.x86_64/gobject/gsignal.c:3401
    > #67 0x00007f4aca76673c in released_cb (gesture=<optimized out>, n_press=1, x=535, y=1009, context=0x367b5f0) at /usr/src/debug/gtk3-3.24.1-1.fc29.x86_64/modules/input/imwayland.c:523
    > #68 0x00007f4ad8b45ace in ffi_call_unix64 () at /usr/src/debug/libffi-3.1-18.fc29.x86_64/src/x86/unix64.S:76
    > #69 0x00007f4ad8b4548f in ffi_call (cif=cif@entry=0x7ffe871c2a80, fn=fn@entry=0x7f4aca766660 <released_cb>, rvalue=<optimized out>, avalue=avalue@entry=0x7ffe871c2990) at /usr/src/debug/libffi-3.1-18.fc29.x86_64/src/x86/ffi64.c:525
    > #70 0x00007f4ad94bfc66 in g_cclosure_marshal_generic_va (closure=<optimized out>, return_value=<optimized out>, instance=<optimized out>, args_list=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=<optimized out>) at /usr/src/debug/glib2-2.58.1-1.fc29.x86_64/gobject/gclosure.c:1610
    > #71 0x00007f4ad94beef6 in _g_closure_invoke_va (closure=0x158f4a50, return_value=0x0, instance=0x159474c0, args=0x7ffe871c2d30, n_params=3, param_types=0x34f2830) at /usr/src/debug/glib2-2.58.1-1.fc29.x86_64/gobject/gclosure.c:873
    > #72 0x00007f4ad94db381 in g_signal_emit_valist (instance=0x159474c0, signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7ffe871c2d30) at /usr/src/debug/glib2-2.58.1-1.fc29.x86_64/gobject/gsignal.c:3300
    > #73 0x00007f4ad94db923 in g_signal_emit (instance=instance@entry=0x159474c0, signal_id=<optimized out>, detail=detail@entry=0) at /usr/src/debug/glib2-2.58.1-1.fc29.x86_64/gobject/gsignal.c:3447
    > #74 0x00007f4aca57bdfc in gtk_gesture_multi_press_end (gesture=0x159474c0, sequence=<optimized out>) at /usr/src/debug/gtk3-3.24.1-1.fc29.x86_64/gtk/gtkgesturemultipress.c:286
    > #75 0x00007f4ad94c206e in g_cclosure_marshal_VOID__BOXEDv (closure=0x34ec650, return_value=<optimized out>, instance=<optimized out>, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0x34ec680) at /usr/src/debug/glib2-2.58.1-1.fc29.x86_64/gobject/gmarshal.c:1950
    > #76 0x00007f4ad94beef6 in _g_closure_invoke_va (closure=0x34ec650, return_value=0x0, instance=0x159474c0, args=0x7ffe871c30f0, n_params=1, param_types=0x34ec680) at /usr/src/debug/glib2-2.58.1-1.fc29.x86_64/gobject/gclosure.c:873
    > #77 0x00007f4ad94db381 in g_signal_emit_valist (instance=0x159474c0, signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7ffe871c30f0) at /usr/src/debug/glib2-2.58.1-1.fc29.x86_64/gobject/gsignal.c:3300
    > #78 0x00007f4ad94db923 in g_signal_emit (instance=instance@entry=0x159474c0, signal_id=<optimized out>, detail=detail@entry=0) at /usr/src/debug/glib2-2.58.1-1.fc29.x86_64/gobject/gsignal.c:3447
    > #79 0x00007f4aca578f02 in _gtk_gesture_set_recognized (sequence=0x0, recognized=0, gesture=0x159474c0) at /usr/src/debug/gtk3-3.24.1-1.fc29.x86_64/gtk/gtkgesture.c:345
    > #80 0x00007f4aca578f02 in _gtk_gesture_check_recognized (gesture=gesture@entry=0x159474c0, sequence=sequence@entry=0x0) at /usr/src/debug/gtk3-3.24.1-1.fc29.x86_64/gtk/gtkgesture.c:386
    > #81 0x00007f4aca57a50b in gtk_gesture_handle_event (controller=0x159474c0, event=0x7f4ab0006bd0) at /usr/src/debug/gtk3-3.24.1-1.fc29.x86_64/gtk/gtkgesture.c:814
    > #82 0x00007f4aca57d40e in gtk_gesture_single_handle_event (controller=0x159474c0, event=0x7f4ab0006bd0) at /usr/src/debug/gtk3-3.24.1-1.fc29.x86_64/gtk/gtkgesturesingle.c:222
    > #83 0x00007f4aca545235 in gtk_event_controller_handle_event (controller=0x159474c0, event=event@entry=0x7f4ab0006bd0) at /usr/src/debug/gtk3-3.24.1-1.fc29.x86_64/gtk/gtkeventcontroller.c:230
    > #84 0x00007f4aca70538b in _gtk_widget_run_controllers (widget=widget@entry=0x38272a0, event=event@entry=0x7f4ab0006bd0, phase=phase@entry=GTK_PHASE_CAPTURE) at /usr/src/debug/gtk3-3.24.1-1.fc29.x86_64/gtk/gtkwidget.c:7379
    > #85 0x00007f4aca70992b in _gtk_widget_captured_event (widget=widget@entry=0x38272a0, event=event@entry=0x7f4ab0006bd0) at /usr/src/debug/gtk3-3.24.1-1.fc29.x86_64/gtk/gtkwidget.c:7433
    > #86 0x00007f4aca5c394b in propagate_event_down (topmost=0x0, event=0x7f4ab0006bd0, widget=0x38272a0) at /usr/src/debug/gtk3-3.24.1-1.fc29.x86_64/gtk/gtkmain.c:2636
    > #87 0x00007f4aca5c394b in propagate_event (widget=widget@entry=0x38272a0, event=event@entry=0x7f4ab0006bd0, captured=captured@entry=1, topmost=topmost@entry=0x0) at /usr/src/debug/gtk3-3.24.1-1.fc29.x86_64/gtk/gtkmain.c:2684
    > #88 0x00007f4aca5c5957 in _gtk_propagate_captured_event (topmost=0x0, event=0x7f4ab0006bd0, widget=0x38272a0) at /usr/src/debug/gtk3-3.24.1-1.fc29.x86_64/gtk/gtkmain.c:2727
    > #89 0x00007f4aca5c5957 in gtk_main_do_event (event=<optimized out>) at /usr/src/debug/gtk3-3.24.1-1.fc29.x86_64/gtk/gtkmain.c:1914
    > #90 0x00007f4aca2b6a39 in _gdk_event_emit (event=event@entry=0x7f4ab0006bd0) at /usr/src/debug/gtk3-3.24.1-1.fc29.x86_64/gdk/gdkevents.c:73
    > #91 0x00007f4aca313286 in gdk_event_source_dispatch (base=<optimized out>, callback=<optimized out>, data=<optimized out>) at /usr/src/debug/gtk3-3.24.1-1.fc29.x86_64/gdk/wayland/gdkeventsource.c:124
    > #92 0x00007f4ad93dd26d in g_main_dispatch (context=0x239de80) at /usr/src/debug/glib2-2.58.1-1.fc29.x86_64/glib/gmain.c:3182
    > #93 0x00007f4ad93dd26d in g_main_context_dispatch (context=context@entry=0x239de80) at /usr/src/debug/glib2-2.58.1-1.fc29.x86_64/glib/gmain.c:3847
    > #94 0x00007f4ad93dd638 in g_main_context_iterate (context=context@entry=0x239de80, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at /usr/src/debug/glib2-2.58.1-1.fc29.x86_64/glib/gmain.c:3920
    > #95 0x00007f4ad93dd6d0 in g_main_context_iteration (context=0x239de80, may_block=1) at /usr/src/debug/glib2-2.58.1-1.fc29.x86_64/glib/gmain.c:3981
    > #96 0x00007f4acaba22db in GtkSalData::Yield(bool, bool) (this=0x2249a70, bWait=true, bHandleAllCurrentEvents=false) at /data/sbergman/lo-clang2/core/vcl/unx/gtk3/gtk3gtkdata.cxx:463
    > #97 0x00007f4acaba6a67 in GtkInstance::DoYield(bool, bool) (this=0x225b3c0, bWait=true, bHandleAllCurrentEvents=false) at /data/sbergman/lo-clang2/core/vcl/unx/gtk/gtkinst.cxx:406
    > #98 0x00007f4adf166c6a in ImplYield(bool, bool) (i_bWait=true, i_bAllEvents=false) at /data/sbergman/lo-clang2/core/vcl/source/app/svapp.cxx:438
    > #99 0x00007f4adf166a14 in Application::Yield() () at /data/sbergman/lo-clang2/core/vcl/source/app/svapp.cxx:502
    > #100 0x00007f4adf1669a6 in Application::Execute() () at /data/sbergman/lo-clang2/core/vcl/source/app/svapp.cxx:419
    > #101 0x00007f4ae601eba1 in desktop::Desktop::Main() (this=0x7ffe871c4600) at /data/sbergman/lo-clang2/core/desktop/source/app/app.cxx:1636
    > #102 0x00007f4adf182b45 in ImplSVMain() () at /data/sbergman/lo-clang2/core/vcl/source/app/svmain.cxx:199
    > #103 0x00007f4adf1843d9 in SVMain() () at /data/sbergman/lo-clang2/core/vcl/source/app/svmain.cxx:233
    > #104 0x00007f4ae608e9b8 in soffice_main() () at /data/sbergman/lo-clang2/core/desktop/source/app/sofficemain.cxx:169
    > #105 0x00000000004011ab in sal_main () at /data/sbergman/lo-clang2/core/desktop/source/app/main.c:48
    > #106 0x00000000004011ab in main (argc=<optimized out>, argc@entry=1, argv=<optimized out>, argv@entry=0x7ffe871c4908) at /data/sbergman/lo-clang2/core/desktop/source/app/main.c:47
    > (gdb) frame 55
    > #55 0x00007f4acac98dea in GtkSalFrame::IMHandler::signalIMRetrieveSurrounding (pContext=0xe188f20) at /data/sbergman/lo-clang2/core/vcl/unx/gtk3/gtk3gtkframe.cxx:4260
    > 4260	        OUString sCursorText(sAllText.copy(0, nPosition));
    > (gdb) print xText
    > $1 = uno::Reference to (accessibility::AccessibleEditableTextPara *) 0x1597a418
    > (gdb) print nPosition
    > $2 = -1
    > (gdb) print sAllText
    > $3 = "foo"
    
    Change-Id: I047f0932bf7f44da58c6f701695b4f3e0fb0adfa
    Reviewed-on: https://gerrit.libreoffice.org/63324
    Tested-by: Jenkins
    Reviewed-by: 's avatarStephan Bergmann <sbergman@redhat.com>
    c3be7739
Adı
Son kayıt (commit)
Son güncelleme
..
android Loading commit data...
backendtest Loading commit data...
headless Loading commit data...
inc Loading commit data...
ios Loading commit data...
null Loading commit data...
opengl Loading commit data...
osx Loading commit data...
qa Loading commit data...
qt5 Loading commit data...
quartz Loading commit data...
source Loading commit data...
uiconfig/ui Loading commit data...
unx Loading commit data...
win Loading commit data...
workben Loading commit data...
AllLangMoTarget_vcl.mk Loading commit data...
CppunitTest_vcl_apitests.mk Loading commit data...
CppunitTest_vcl_app_test.mk Loading commit data...
CppunitTest_vcl_bitmap_render_test.mk Loading commit data...
CppunitTest_vcl_bitmap_test.mk Loading commit data...
CppunitTest_vcl_bitmapprocessor_test.mk Loading commit data...
CppunitTest_vcl_blocklistparser_test.mk Loading commit data...
CppunitTest_vcl_complextext.mk Loading commit data...
CppunitTest_vcl_dialogs_test.mk Loading commit data...
CppunitTest_vcl_errorhandler.mk Loading commit data...
CppunitTest_vcl_filters_test.mk Loading commit data...
CppunitTest_vcl_font.mk Loading commit data...
CppunitTest_vcl_fontcharmap.mk Loading commit data...
CppunitTest_vcl_fontfeature.mk Loading commit data...
CppunitTest_vcl_fontmetric.mk Loading commit data...
CppunitTest_vcl_graphic_test.mk Loading commit data...
CppunitTest_vcl_jpeg_read_write_test.mk Loading commit data...
CppunitTest_vcl_lifecycle.mk Loading commit data...
CppunitTest_vcl_mnemonic.mk Loading commit data...
CppunitTest_vcl_outdev.mk Loading commit data...
CppunitTest_vcl_pdfexport.mk Loading commit data...
CppunitTest_vcl_svm_test.mk Loading commit data...
CppunitTest_vcl_timer.mk Loading commit data...
CustomTarget_gtk3_kde5_moc.mk Loading commit data...
CustomTarget_kde4_moc.mk Loading commit data...
CustomTarget_kde5_moc.mk Loading commit data...
CustomTarget_nativecalc.mk Loading commit data...
CustomTarget_nativecore.mk Loading commit data...
CustomTarget_nativedraw.mk Loading commit data...
CustomTarget_nativemath.mk Loading commit data...
CustomTarget_nativewriter.mk Loading commit data...
CustomTarget_qt5_moc.mk Loading commit data...
Executable_602fuzzer.mk Loading commit data...
Executable_bmpfuzzer.mk Loading commit data...
Executable_cgmfuzzer.mk Loading commit data...
Executable_diffuzzer.mk Loading commit data...
Executable_docxfuzzer.mk Loading commit data...
Executable_dxffuzzer.mk Loading commit data...
Executable_epsfuzzer.mk Loading commit data...
Executable_fftester.mk Loading commit data...
Executable_fodpfuzzer.mk Loading commit data...
Executable_fodsfuzzer.mk Loading commit data...
Executable_fodtfuzzer.mk Loading commit data...
Executable_giffuzzer.mk Loading commit data...
Executable_htmlfuzzer.mk Loading commit data...
Executable_hwpfuzzer.mk Loading commit data...
Executable_icontest.mk Loading commit data...
Executable_jpgfuzzer.mk Loading commit data...
Executable_lo_kde5filepicker.mk Loading commit data...
Executable_lwpfuzzer.mk Loading commit data...
Executable_metfuzzer.mk Loading commit data...
Executable_mmlfuzzer.mk Loading commit data...
Executable_mtfdemo.mk Loading commit data...
Executable_mtpfuzzer.mk Loading commit data...
Executable_olefuzzer.mk Loading commit data...
Executable_outdevgrind.mk Loading commit data...
Executable_pcdfuzzer.mk Loading commit data...
Executable_pctfuzzer.mk Loading commit data...
Executable_pcxfuzzer.mk Loading commit data...
Executable_pngfuzzer.mk Loading commit data...
Executable_ppmfuzzer.mk Loading commit data...
Executable_pptfuzzer.mk Loading commit data...
Executable_pptxfuzzer.mk Loading commit data...
Executable_psdfuzzer.mk Loading commit data...
Executable_qpwfuzzer.mk Loading commit data...
Executable_rasfuzzer.mk Loading commit data...
Executable_rtffuzzer.mk Loading commit data...
Executable_scrtffuzzer.mk Loading commit data...
Executable_sftfuzzer.mk Loading commit data...
Executable_slkfuzzer.mk Loading commit data...
Executable_svdemo.mk Loading commit data...
Executable_svmfuzzer.mk Loading commit data...
Executable_svpclient.mk Loading commit data...
Executable_svptest.mk Loading commit data...
Executable_tgafuzzer.mk Loading commit data...
Executable_tiffuzzer.mk Loading commit data...
Executable_ui-previewer.mk Loading commit data...
Executable_vcldemo.mk Loading commit data...
Executable_visualbackendtest.mk Loading commit data...
Executable_wksfuzzer.mk Loading commit data...
Executable_wmffuzzer.mk Loading commit data...
Executable_ww2fuzzer.mk Loading commit data...
Executable_ww6fuzzer.mk Loading commit data...
Executable_ww8fuzzer.mk Loading commit data...
Executable_xbmfuzzer.mk Loading commit data...
Executable_xid_fullscreen_on_all_monitors.mk Loading commit data...
Executable_xlsfuzzer.mk Loading commit data...
Executable_xlsxfuzzer.mk Loading commit data...
Executable_xpmfuzzer.mk Loading commit data...
Library_desktop_detector.mk Loading commit data...
Library_vcl.mk Loading commit data...
Library_vclplug_gen.mk Loading commit data...
Library_vclplug_gtk.mk Loading commit data...
Library_vclplug_gtk3.mk Loading commit data...
Library_vclplug_gtk3_kde5.mk Loading commit data...
Library_vclplug_kde4.mk Loading commit data...
Library_vclplug_kde5.mk Loading commit data...
Library_vclplug_osx.mk Loading commit data...
Library_vclplug_qt5.mk Loading commit data...
Library_vclplug_win.mk Loading commit data...
Makefile Loading commit data...
Module_vcl.mk Loading commit data...
Package_fontunxppds.mk Loading commit data...
Package_fontunxpsprint.mk Loading commit data...
Package_opengl.mk Loading commit data...
Package_opengl_blacklist.mk Loading commit data...
Package_osxres.mk Loading commit data...
README Loading commit data...
README.GDIMetaFile Loading commit data...
README.lifecycle Loading commit data...
README.scheduler Loading commit data...
README.vars Loading commit data...
StaticLibrary_fuzzer_calc.mk Loading commit data...
StaticLibrary_fuzzer_core.mk Loading commit data...
StaticLibrary_fuzzer_draw.mk Loading commit data...
StaticLibrary_fuzzer_math.mk Loading commit data...
StaticLibrary_fuzzer_writer.mk Loading commit data...
StaticLibrary_fuzzerstubs.mk Loading commit data...
StaticLibrary_glxtest.mk Loading commit data...
StaticLibrary_vclmain.mk Loading commit data...
UIConfig_vcl.mk Loading commit data...
WinResTarget_vcl.mk Loading commit data...
commonfuzzer.mk Loading commit data...
vcl.android.component Loading commit data...
vcl.common.component Loading commit data...
vcl.headless.component Loading commit data...
vcl.ios.component Loading commit data...
vcl.macosx.component Loading commit data...
vcl.unx.component Loading commit data...
vcl.windows.component Loading commit data...