View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0007324 | Scribus | General | public | 2008-08-28 18:48 | 2008-11-05 22:52 |
Reporter | dvogel | Assigned To | jghali | ||
Priority | normal | Severity | crash | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Platform | Windows | OS | Windows | OS Version | XP SP2 |
Product Version | 1.3.3.12 | ||||
Target Version | 1.3.3.13 | Fixed in Version | 1.3.3.13svn | ||
Summary | 0007324: crash when saving object to scrapbook | ||||
Description | I have a grouping of objects in my document that I want to save to my scrapbook. When I do, it causes Scribus to crash with the EXCEPTION_ACCESS_VIOLATION error message. | ||||
Steps To Reproduce | Open the attached file. Left click on the third grouping of objects; it is labled 0000063. Right click and choose Send to Scrapbook. The name does not matter. You should get the EXCEPTION_ACCESS_VIOLATION crash. | ||||
Additional Information | After the program crashes, trying to reopen the problem results in the same crash, unless I delete the scrapbook file in: C:\Documents and Settings\vogel\Application Data\Scribus\scrapbook\main\ This bug applies to 1.3.3.12 and 1.3.5svn. | ||||
Tags | No tags attached. | ||||
Patch | |||||
2008-08-28 18:48
|
|
|
In the 1.3.3.12 case, the scrapbook file is in: C:\Documents and Settings\vogel\.scribus\scrapbook\main\ |
|
Verified on Debian/unstable with Scribus 1.3.3.12. Here is a backtrace: #0 0x000007b1 in ?? () 0000001 0x08410cec in QPtrList<Page>::deleteItem (this=0x8be8b14, d=0x928af68) at /usr/share/qt3/include/qptrlist.h:153 0000002 0x4085871c in QGList::clear () from /usr/lib/libqt-mt.so.3 0000003 0x08410cff in QPtrList<Page>::clear (this=0x8be8b14) at /usr/share/qt3/include/qptrlist.h:96 0000004 0x083fa67e in ~ScribusDoc (this=0x8be8a28) at scribusdoc.cpp:322 0000005 0x08569aab in ScribusMainWindow::emergencySave (this=0x86780a0) at scribus.cpp:8667 0000006 0x085b64a6 in defaultCrashHandler (sig=11) at main_nix.cpp:126 0000007 <signal handler called> 0000008 0x081d66c2 in FPoint (this=0x7fb40d78, p=@0x9419ff8) at fpoint.h:39 0000009 0x083e1726 in ScPreview::createPreview (this=0x8e39578, data= {static null = {static null = <same as static member of an already seen type>, d = 0x86500c0, static shared_null = 0x86500c0}, d = 0x7fb4111c, static shared_null = 0x86500c0}) at scpreview.cpp:694 0000010 0x083ea27e in Biblio::ObjFromMenu (this=0x8aca110, text= {static null = {static null = <same as static member of an already seen type>, d = 0x86500c0, static shared_null = 0x86500c0}, d = 0x7fb4119c, static shared_null = 0x86500c0}) at scrap.cpp:671 0000011 0x0856af62 in ScribusMainWindow::PutScrap (this=0x86780a0) at scribus.cpp:8390 0000012 0x085a57c4 in ScribusMainWindow::qt_invoke (this=0x86780a0, _id=89, _o=0x7fb412c4) at scribus.moc:920 0000013 0x405adf6d in QObject::activate_signal () from /usr/lib/libqt-mt.so.3 0000014 0x405aeaed in QObject::activate_signal () from /usr/lib/libqt-mt.so.3 0000015 0x408f9829 in QAction::activated () from /usr/lib/libqt-mt.so.3 0000016 0x406e7ec0 in QAction::internalActivation () from /usr/lib/libqt-mt.so.3 0000017 0x408f9b46 in QAction::qt_invoke () from /usr/lib/libqt-mt.so.3 0000018 0x083e5059 in ScrAction::qt_invoke (this=0x86f8268, _id=8, _o=0x7fb413e4) at scraction.moc:211 0000019 0x405adf6d in QObject::activate_signal () from /usr/lib/libqt-mt.so.3 0000020 0x408d805e in QSignal::signal () from /usr/lib/libqt-mt.so.3 0000021 0x405c98c7 in QSignal::activate () from /usr/lib/libqt-mt.so.3 0000022 0x406aec2a in QPopupMenu::mouseReleaseEvent () from /usr/lib/libqt-mt.so.3 0000023 0x405e6554 in QWidget::event () from /usr/lib/libqt-mt.so.3 0000024 0x4055018a in QApplication::internalNotify () from /usr/lib/libqt-mt.so.3 0000025 0x405510ba in QApplication::notify () from /usr/lib/libqt-mt.so.3 0000026 0x404f006c in QETWidget::translateMouseEvent () from /usr/lib/libqt-mt.so.3 0000027 0x404eeafd in QApplication::x11ProcessEvent () from /usr/lib/libqt-mt.so.3 0000028 0x404fefe6 in QEventLoop::processEvents () from /usr/lib/libqt-mt.so.3 0000029 0x40566b80 in QEventLoop::enterLoop () from /usr/lib/libqt-mt.so.3 0000030 0x4054fc6f in QApplication::enter_loop () from /usr/lib/libqt-mt.so.3 0000031 0x406b2027 in QPopupMenu::exec () from /usr/lib/libqt-mt.so.3 0000032 0x08457e1c in ScribusView::contentsMouseReleaseEvent (this=0x8c54448, m=0x7fb43ba4) at scribusview.cpp:2193 0000033 0x406c0271 in QScrollView::viewportMouseReleaseEvent () from /usr/lib/libqt-mt.so.3 0000034 0x406be090 in QScrollView::eventFilter () from /usr/lib/libqt-mt.so.3 0000035 0x405ad78c in QObject::activate_filters () from /usr/lib/libqt-mt.so.3 0000036 0x405ad7fb in QObject::event () from /usr/lib/libqt-mt.so.3 0000037 0x405e643c in QWidget::event () from /usr/lib/libqt-mt.so.3 0000038 0x4055018a in QApplication::internalNotify () from /usr/lib/libqt-mt.so.3 0000039 0x405510ba in QApplication::notify () from /usr/lib/libqt-mt.so.3 0000040 0x404efa52 in QETWidget::translateMouseEvent () from /usr/lib/libqt-mt.so.3 0000041 0x404eeafd in QApplication::x11ProcessEvent () from /usr/lib/libqt-mt.so.3 0000042 0x404fefe6 in QEventLoop::processEvents () from /usr/lib/libqt-mt.so.3 0000043 0x40566b80 in QEventLoop::enterLoop () from /usr/lib/libqt-mt.so.3 0000044 0x40566a16 in QEventLoop::exec () from /usr/lib/libqt-mt.so.3 0000045 0x4054fcff in QApplication::exec () from /usr/lib/libqt-mt.so.3 0000046 0x085b6652 in mainApp (argc=1, argv=0x7fb444a4) at main_nix.cpp:74 0000047 0x085b6690 in main (argc=0, argv=0x0) at main_nix.cpp:50 Here is the parameter info for frame 0000001: (gdb) fr 1 0000001 0x08410cec in QPtrList<Page>::deleteItem (this=0x8be8b14, d=0x928af68) at /usr/share/qt3/include/qptrlist.h:153 153 if ( del_item ) delete (type *)d; |
|
If I set a breakpoint on line 676 in ScPreview::createPreview I can see the problem: Breakpoint 1, ScPreview::createPreview (this=0x8be9c78, data= {static null = {static null = <same as static member of an already seen type>, d = 0x86500c0, static shared_null = 0x86500c0}, d = 0x7fb780dc, static shared_null = 0x86500c0}) at scpreview.cpp:676 676 for (uint n = 0; n < OB.PoLine.size()-3; n += 4) (gdb) inspect n $3 = 140837056 (gdb) inspect OB.PoLine.size() $4 = 2 The loop assumes that a PolyLine will have at least 4 points. The attached file apparently demonstrates that this is not true. I don't know enough about the PolyLine implementation to know whether this loop needs to be changed or whether the PolyLine methods need to be changed to enforce the invariant. I made the PolyLine mistakenly. I didn't even realize that it was there until I looked in the debugger and then at the code. The PolyLine is hidden behind the large gray block. It is extremely small. |
|
The way paths are constructed need 4 PoLine points per path points. So a path must have at least 4 PoLine points to be valid. We normally protect code against incorrect PoLine size. Protection was obviously missing here. Fixed in 1.3.3.13svn and 1.3.5svn! |
Date Modified | Username | Field | Change |
---|---|---|---|
2008-08-28 18:48 | dvogel | New Issue | |
2008-08-28 18:48 | dvogel | File Added: example_for_EXCEPTION_ACCESS_VIOLATION.sla | |
2008-08-28 18:50 | dvogel | Note Added: 0020177 | |
2008-08-28 18:53 | jghali | Product Version | 1.3.5svn => 1.3.3.12 |
2008-08-28 18:53 | jghali | Additional Information Updated | |
2008-08-28 21:59 | dvogel | Note Added: 0020178 | |
2008-08-28 22:54 | dvogel | Note Added: 0020179 | |
2008-08-29 08:14 | jghali | Status | new => confirmed |
2008-08-29 08:14 | jghali | Target Version | => 1.3.3.13 |
2008-08-29 19:36 | jghali | Note Added: 0020181 | |
2008-08-29 19:36 | jghali | Status | confirmed => resolved |
2008-08-29 19:36 | jghali | Fixed in Version | => 1.3.3.13svn |
2008-08-29 19:36 | jghali | Resolution | open => fixed |
2008-08-29 19:36 | jghali | Assigned To | => jghali |
2008-08-29 20:43 | jghali | Summary | EXCEPTION_ACCESS_VIOLATION When saving a grouping of objects to my scrapbook => crash when saving object to scrapbook |
2008-11-05 22:52 | jghali | Status | resolved => closed |