Bug 108659 - KSpread crashes when rendering obscured cells
Summary: KSpread crashes when rendering obscured cells
Status: RESOLVED FIXED
Alias: None
Product: calligrasheets
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: unspecified FreeBSD
: NOR crash
Target Milestone: ---
Assignee: Laurent Montel
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-07-06 17:45 UTC by Raphael Langerhorst
Modified: 2005-07-06 22:00 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments
document that crashes when you scroll up (19.22 KB, application/x-kspread)
2005-07-06 17:47 UTC, Raphael Langerhorst
Details
fixes the crash (501 bytes, patch)
2005-07-06 18:04 UTC, Raphael Langerhorst
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Raphael Langerhorst 2005-07-06 17:45:08 UTC
Version:           1.4 (using KDE 3.4.1, compiled sources)
Compiler:          gcc version 3.4.2 [FreeBSD] 20040728
OS:                FreeBSD (amd64) release 5.4-STABLE

[Switching to LWP 100168]
[KCrash handler]
#6  0x0000000805e196f1 in KSpreadCell::row ()
   from /usr/local/lib/libkspreadcommon.so.0
#7  0x0000000805e21a56 in KSpreadCell::paintObscuredCells ()
   from /usr/local/lib/libkspreadcommon.so.0
#8  0x0000000805e21114 in KSpreadCell::paintCell ()
   from /usr/local/lib/libkspreadcommon.so.0
#9  0x0000000805e0e6ac in KSpreadCanvas::paintUpdates ()
   from /usr/local/lib/libkspreadcommon.so.0
#10 0x0000000805f232a4 in KSpreadView::paintUpdates ()
   from /usr/local/lib/libkspreadcommon.so.0
#11 0x0000000805e4d380 in KSpreadDoc::paintUpdates ()
   from /usr/local/lib/libkspreadcommon.so.0
#12 0x0000000805e513f5 in KSpreadDoc::emitEndOperation ()
   from /usr/local/lib/libkspreadcommon.so.0
#13 0x0000000805e04c6f in KSpreadCanvas::slotScrollVert ()
   from /usr/local/lib/libkspreadcommon.so.0
#14 0x0000000805e1812b in KSpreadCanvas::qt_invoke ()
   from /usr/local/lib/libkspreadcommon.so.0
#15 0x00000008020c989d in QObject::activate_signal ()
   from /usr/X11R6/lib/libqt-mt.so.3
#16 0x00000008020c9af2 in QObject::activate_signal ()
   from /usr/X11R6/lib/libqt-mt.so.3
#17 0x00000008023d17a5 in QScrollBar::valueChanged ()
   from /usr/X11R6/lib/libqt-mt.so.3
#18 0x00000008021bfdb2 in QScrollBar::valueChange ()
   from /usr/X11R6/lib/libqt-mt.so.3
#19 0x00000008021bf2ea in QRangeControl::setValue ()
   from /usr/X11R6/lib/libqt-mt.so.3
#20 0x00000008021c1280 in QScrollBar::setValue ()
   from /usr/X11R6/lib/libqt-mt.so.3
#21 0x00000008021c01ac in QScrollBar::wheelEvent ()
   from /usr/X11R6/lib/libqt-mt.so.3
#22 0x00000008020fceb6 in QWidget::event () from /usr/X11R6/lib/libqt-mt.so.3
#23 0x0000000802072052 in QApplication::internalNotify ()
   from /usr/X11R6/lib/libqt-mt.so.3
#24 0x0000000802071970 in QApplication::notify ()
   from /usr/X11R6/lib/libqt-mt.so.3
#25 0x00000008014a79a6 in KApplication::notify ()
   from /usr/local/lib/libkdecore.so.6
#26 0x0000000805e071b7 in KSpreadCanvas::wheelEvent ()
   from /usr/local/lib/libkspreadcommon.so.0
#27 0x00000008020fceb6 in QWidget::event () from /usr/X11R6/lib/libqt-mt.so.3
#28 0x0000000802072052 in QApplication::internalNotify ()
   from /usr/X11R6/lib/libqt-mt.so.3
#29 0x0000000802071970 in QApplication::notify ()
   from /usr/X11R6/lib/libqt-mt.so.3
#30 0x00000008014a79a6 in KApplication::notify ()
   from /usr/local/lib/libkdecore.so.6
#31 0x000000080200eac0 in QETWidget::translateWheelEvent ()
   from /usr/X11R6/lib/libqt-mt.so.3
#32 0x000000080200e118 in QETWidget::translateMouseEvent ()
   from /usr/X11R6/lib/libqt-mt.so.3
#33 0x000000080200c7bd in QApplication::x11ProcessEvent ()
   from /usr/X11R6/lib/libqt-mt.so.3
#34 0x00000008020217a9 in QEventLoop::processEvents ()
   from /usr/X11R6/lib/libqt-mt.so.3
#35 0x00000008020833b9 in QEventLoop::enterLoop ()
   from /usr/X11R6/lib/libqt-mt.so.3
#36 0x0000000802083312 in QEventLoop::exec ()
   from /usr/X11R6/lib/libqt-mt.so.3
#37 0x0000000802072175 in QApplication::exec ()
   from /usr/X11R6/lib/libqt-mt.so.3
#38 0x0000000804c8d56e in kdemain () from /usr/local/lib/libkdeinit_kspread.so
#39 0x0000000804b8b9b9 in kdeinitmain () from /usr/local/lib/kde3/kspread.so
#40 0x00000000004070ac in execpath_avoid_loops ()
#41 0x00000000004081cf in execpath_avoid_loops ()
#42 0x00000000004087d3 in execpath_avoid_loops ()
#43 0x0000000000409bb1 in main ()
Comment 1 Raphael Langerhorst 2005-07-06 17:47:53 UTC
Created attachment 11697 [details]
document that crashes when you scroll up

open that document and scroll towards cell A1, it will crash.
Comment 2 Raphael Langerhorst 2005-07-06 18:04:46 UTC
Created attachment 11698 [details]
fixes the crash

This patch makes KSpread not crash. I didn't closely investigate if it's solved
well, so I don't know if the _bug_ is fixed ;)	Please anyone take a look and
apply in branch and trunk. Thanks!
Comment 3 Raphael Langerhorst 2005-07-06 21:58:28 UTC
SVN commit 432254 by raphael:

Fix crash related to obscured cells in rendering code.

Note: There might be some related bugs that caused this crash.
      Anyway, this code is cleaner and does fix the crash.

CCBUG: 108659


 M  +3 -1      kspread_cell.cc  


--- trunk/koffice/kspread/kspread_cell.cc #432253:432254
@@ -2488,7 +2488,9 @@
 	  else {
 	  // If the cell towards the top is part of a merged cell, get
 	  // the pointer to the master cell.
-	    cellUp = cellUp->ultimateObscuringCell();
+	    if (cellUp->ultimateObscuringCell())
+	      cellUp = cellUp->ultimateObscuringCell();
+	    
 	    topPen = cellUp->effBottomBorderPen( cellUp->column(),
 						 cellUp->row() );
 
Comment 4 Raphael Langerhorst 2005-07-06 22:00:32 UTC
SVN commit 432256 by raphael:

KOffice 1.4 Backport

Fix crash related to obscured cells in rendering code.

Note: There might be some related bugs that caused this crash.
      Anyway, this code is cleaner and does fix the crash.

BUG: 108659


 M  +3 -1      kspread_cell.cc  


--- branches/koffice/1.4/koffice/kspread/kspread_cell.cc #432255:432256
@@ -2488,7 +2488,9 @@
 	  else {
 	  // If the cell towards the top is part of a merged cell, get
 	  // the pointer to the master cell.
-	    cellUp = cellUp->ultimateObscuringCell();
+	    if (cellUp->ultimateObscuringCell())
+	      cellUp = cellUp->ultimateObscuringCell();
+	    
 	    topPen = cellUp->effBottomBorderPen( cellUp->column(),
 						 cellUp->row() );