https://bugs.kde.org/show_bug.cgi?id=487338
simon <mappe...@outlook.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |mappe...@outlook.com --- Comment #9 from simon <mappe...@outlook.com> --- I can also reproduce this. OS: Gentoo Linux amd64 kdiff3 version: 1.11.1 KDE Frameworks Version: 5.116.0 Qt Version: 5.15.14 Graphics Platform: Wayland Thread 1 "kdiff3" received signal SIGFPE, Arithmetic exception. 0x00005555555ef793 in getBestFirstLine (line=..., nofLines=nofLines@entry=2, firstLine=..., visibleLines=visibleLines@entry=0) at /usr/src/debug/kde-misc/kdiff3-1.11.1/kdiff3-1.11.1/src/difftextwindow.cpp:589 589 newFirstLine = std::max(0, line - (visibleLines * numberPages) / 3); (gdb) p visibleLines $1 = 0 (gdb) list 584 if(nofLines < visibleLines) 585 newFirstLine = std::max(0, (LineType)std::ceil(line - (visibleLines - nofLines) / 2)); 586 else 587 { 588 qint32 numberPages = floor(nofLines / visibleLines); 589 newFirstLine = std::max(0, line - (visibleLines * numberPages) / 3); 590 } 591 return newFirstLine; 592 } 593 (gdb) bt #0 0x00005555555ef793 in getBestFirstLine (line=..., nofLines=nofLines@entry=2, firstLine=..., visibleLines=visibleLines@entry=0) at /usr/src/debug/kde-misc/kdiff3-1.11.1/kdiff3-1.11.1/src/difftextwindow.cpp:589 #1 0x00005555555ef8e0 in DiffTextWindow::setFastSelectorRange (this=0x555555cbc1a0, line1=<optimized out>, nofLines=<optimized out>) at /usr/src/debug/kde-misc/kdiff3-1.11.1/kdiff3-1.11.1/src/difftextwindow.cpp:600 #2 0x00007ffff68ae4c6 in void doActivate<false>(QObject*, int, void**) () from /usr/lib64/libQt5Core.so.5 #3 0x000055555559afd6 in MergeResultWindow::setFastSelectorRange (this=this@entry=0x555555b97930, _t1=..., _t2=<optimized out>) at /usr/src/debug/kde-misc/kdiff3-1.11.1/kdiff3-1.11.1_build/src/kdiff3_autogen/EWIEGA46WW/moc_mergeresultwindow.cpp:476 #4 0x000055555561ca12 in MergeResultWindow::setFastSelector (this=0x555555b97930, i=...) at /usr/include/boost/safe_numerics/checked_result.hpp:26 #5 0x000055555561e233 in MergeResultWindow::slotGoTop (this=0x555555b97930) at /usr/src/debug/kde-misc/kdiff3-1.11.1/kdiff3-1.11.1/src/mergeresultwindow.cpp:677 #6 MergeResultWindow::merge (this=0x555555b97930, bAutoSolve=true, defaultSelector=<optimized out>, bConflictsOnly=false, bWhiteSpaceOnly=<optimized out>) at /usr/src/debug/kde-misc/kdiff3-1.11.1/kdiff3-1.11.1/src/mergeresultwindow.cpp:416 #7 0x000055555561e5cc in MergeResultWindow::init (this=0x555555b97930, pLineDataA=..., sizeA=..., pLineDataB=..., sizeB=..., pLineDataC=..., sizeC=..., pDiff3LineList=0x555555748450, pTotalDiffStatus=0x555555748f60, bAutoSolve=true) at /usr/src/debug/kde-misc/kdiff3-1.11.1/kdiff3-1.11.1/src/mergeresultwindow.cpp:132 #8 0x00005555555dca66 in KDiff3App::mainInit (this=this@entry=0x555555748000, pTotalDiffStatus=0x555555748f60, inFlags=..., inFlags@entry=...) at /usr/src/debug/kde-misc/kdiff3-1.11.1/kdiff3-1.11.1/src/pdiff.cpp:380 #9 0x00005555555acf02 in KDiff3App::doFileCompare (this=0x555555748000) at /usr/include/qt5/QtCore/qflags.h:121 #10 KDiff3App::completeInit (this=0x555555748000, fn1=..., fn2=..., fn3=...) at /usr/src/debug/kde-misc/kdiff3-1.11.1/kdiff3-1.11.1/src/kdiff3.cpp:493 #11 0x00005555555a39f0 in KDiff3Shell::KDiff3Shell (this=0x555555738ba0, fn1=..., fn2=..., fn3=..., __in_chrg=<optimized out>, __vtt_parm=<optimized out>) at /usr/src/debug/kde-misc/kdiff3-1.11.1/kdiff3-1.11.1/src/kdiff3_shell.cpp:39 #12 0x00005555555a1bb0 in operator() (__closure=0x5555557432d0) at /usr/src/debug/kde-misc/kdiff3-1.11.1/kdiff3-1.11.1/src/main.cpp:195 #13 QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, main(qint32, char**)::<lambda()> >::call ( arg=<optimized out>, f=...) at /usr/include/qt5/QtCore/qobjectdefs_impl.h:146 #14 QtPrivate::Functor<main(qint32, char**)::<lambda()>, 0>::call<QtPrivate::List<>, void> (arg=<optimized out>, f=...) at /usr/include/qt5/QtCore/qobjectdefs_impl.h:256 #15 QtPrivate::QFunctorSlotObject<main(qint32, char**)::<lambda()>, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=<optimized out>, this_=0x5555557432c0, r=<optimized out>, a=<optimized out>, ret=<optimized out>) at /usr/include/qt5/QtCore/qobjectdefs_impl.h:443 #16 0x00007ffff68a4d7e in QObject::event(QEvent*) () from /usr/lib64/libQt5Core.so.5 #17 0x00007ffff72fa1fe in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5 #18 0x00007ffff687aee8 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib64/libQt5Core.so.5 #19 0x00007ffff687e3c3 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /usr/lib64/libQt5Core.so.5 #20 0x00007ffff68cc473 in postEventSourceDispatch(_GSource*, int (*)(void*), void*) () from /usr/lib64/libQt5Core.so.5 #21 0x00007ffff5521ff2 in g_main_dispatch () from /usr/lib64/libglib-2.0.so.0 #22 0x00007ffff55251a7 in g_main_context_iterate_unlocked.isra () from /usr/lib64/libglib-2.0.so.0 #23 0x00007ffff55257cc in g_main_context_iteration () from /usr/lib64/libglib-2.0.so.0 This looks like an integer divide-by-zero in getBestFirstLine. I am using the following workaround to prevent the crash: --- A/src/difftextwindow.cpp +++ B/src/difftextwindow.cpp @@ -583,7 +583,7 @@ if(nofLines < visibleLines) newFirstLine = std::max(0, (LineType)std::ceil(line - (visibleLines - nofLines) / 2)); - else + else if(visibleLines > 0) { qint32 numberPages = floor(nofLines / visibleLines); newFirstLine = std::max(0, line - (visibleLines * numberPages) / 3); -- You are receiving this mail because: You are watching all bug changes.