Summary: | Gwenview crashes in Gwenview::RasterImageItem::paint() when trying to rotate a jpg file quickly multiple times | ||
---|---|---|---|
Product: | [Applications] gwenview | Reporter: | Kai Uwe Broulik <kde> |
Component: | general | Assignee: | Gwenview Bugs <gwenview-bugs-null> |
Status: | RESOLVED FIXED | ||
Severity: | crash | CC: | angelogia, bugseforuns, chalkitisge, christree4207, cornelis, elvis.angelaccio, enchanter42, euphonisten, flying-sheep, fw.smit01, ismailsahillioglu, jan.rathmann, kde.depletion917, kde, lxbujorianu, marat.minshin, moritzherrmann09+kde.org, nate, oded, omerusta, policratus, postix, prestonmontewest, sam, sid1950, simonpatp, yogo.1212, zilti |
Priority: | VHI | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Other | ||
OS: | Linux | ||
Latest Commit: | https://invent.kde.org/graphics/gwenview/commit/8e8b025b79b44db957d164698b68681323b9a917 | Version Fixed In: | 23.04 |
Sentry Crash Report: | |||
Attachments: |
New crash information added by DrKonqi
A sample case to demostrate bug New crash information added by DrKonqi |
Description
Kai Uwe Broulik
2021-07-09 21:30:54 UTC
Created attachment 142331 [details]
New crash information added by DrKonqi
gwenview (21.11.70) using Qt 5.15.3
- What I was doing when the application crashed:
Undoing a 90 degrees rotation right. This was done almost immediately after startup.
-- Backtrace (Reduced):
#4 __memmove_avx_unaligned_erms () at ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:391
#5 0x00007effd52d9be7 in memcpy (__len=<optimized out>, __src=0x7effb448ec58, __dest=<optimized out>) at /usr/include/x86_64-linux-gnu/bits/string_fortified.h:34
#6 QImage::copy (this=0x56499fc9e3c0, r=...) at image/qimage.cpp:1239
#7 0x00007effd6930a25 in Gwenview::RasterImageItem::paint (this=0x5649a00914b0, painter=0x7ffdb76a3010) at ./lib/documentview/rasterimageitem.cpp:106
#8 0x00007effd5cc3e2c in QGraphicsScenePrivate::draw (this=this@entry=0x56499f3cea40, item=item@entry=0x5649a00914b0, painter=painter@entry=0x7ffdb76a3010, viewTransform=viewTransform@entry=0x0, transformPtr=<optimized out>, exposedRegion=exposedRegion@entry=0x56499f79d3f0, widget=<optimized out>, opacity=opacity@entry=1, effectTransform=<optimized out>, wasDirtyParentSceneTransform=<optimized out>, drawItem=<optimized out>) at graphicsview/qgraphicsscene.cpp:4981
*** Bug 445505 has been marked as a duplicate of this bug. *** *** Bug 450095 has been marked as a duplicate of this bug. *** *** Bug 444208 has been marked as a duplicate of this bug. *** *** Bug 451006 has been marked as a duplicate of this bug. *** *** Bug 453460 has been marked as a duplicate of this bug. *** Created attachment 148626 [details]
A sample case to demostrate bug
Steps to reproduce bug : 1- Open the sample ( which i uploaded with this bug entry ) with gwenview 2- Pres ctrl 0 or rightclick and select Actual Size 3- Keep pressed and hold Ctrl Shift R about 2 minutes 4- it will crash My crash backtrace is : Application: Gwenview (gwenview), signal: Segmentation fault Content of s_kcrashErrorMessage: {_M_t = {<std::__uniq_ptr_impl<char, std::default_delete<char []> >> = {_M_t = std::tuple containing = {[1] = 0x0, [2] = {<No data fields>}}}, <No data fields>}} [KCrash Handler] #5 0x00007fc51c3f848d in __memmove_avx_unaligned_erms () from /usr/lib/libc.so.6 #6 0x00007fc51d172b93 in QImage::copy(QRect const&) const () from /usr/lib/libQt5Gui.so.5 #7 0x00007fc51f4c3c4a in Gwenview::RasterImageItem::paint (this=0x565102da4850, painter=0x7ffc33d5eba0) at /home/kde-dev/kde/src/gwenview/lib/documentview/rasterimageitem.cpp:106 #8 0x00007fc51db62338 in ?? () from /usr/lib/libQt5Widgets.so.5 #9 0x00007fc51db63330 in ?? () from /usr/lib/libQt5Widgets.so.5 #10 0x00007fc51db6249b in ?? () from /usr/lib/libQt5Widgets.so.5 #11 0x00007fc51db63330 in ?? () from /usr/lib/libQt5Widgets.so.5 #12 0x00007fc51db6249b in ?? () from /usr/lib/libQt5Widgets.so.5 #13 0x00007fc51db38b01 in ?? () from /usr/lib/libQt5Widgets.so.5 #14 0x00007fc51dbc976c in QGraphicsEffectSource::draw(QPainter*) () from /usr/lib/libQt5Widgets.so.5 #15 0x00007fc51db6312e in ?? () from /usr/lib/libQt5Widgets.so.5 #16 0x00007fc51db86ad4 in QGraphicsView::paintEvent(QPaintEvent*) () from /usr/lib/libQt5Widgets.so.5 #17 0x00007fc51d86c54c in QWidget::event(QEvent*) () from /usr/lib/libQt5Widgets.so.5 #18 0x00007fc51d91bc53 in QFrame::event(QEvent*) () from /usr/lib/libQt5Widgets.so.5 #19 0x00007fc51ca3232a in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5 #20 0x00007fc51d8362b5 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5 #21 0x00007fc51ca335aa in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5 #22 0x00007fc51d86026c in QWidgetPrivate::sendPaintEvent(QRegion const&) () from /usr/lib/libQt5Widgets.so.5 #23 0x00007fc51d861602 in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, QFlags<QWidgetPrivate::DrawWidgetFlag>, QPainter*, QWidgetRepaintManager*) () from /usr/lib/libQt5Widgets.so.5 #24 0x00007fc51d841b87 in ?? () from /usr/lib/libQt5Widgets.so.5 #25 0x00007fc51d86c8c5 in QWidget::event(QEvent*) () from /usr/lib/libQt5Widgets.so.5 #26 0x00007fc51ed0af97 in KXmlGuiWindow::event (this=0x565102b88ae0, ev=0x565103377a00) at /home/kde-dev/kde/src/kxmlgui/src/kxmlguiwindow.cpp:220 #27 0x00007fc51d8362c6 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5 #28 0x00007fc51ca335aa in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5 #29 0x00007fc51ca340a9 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /usr/lib/libQt5Core.so.5 #30 0x00007fc51db6dadf in ?? () from /usr/lib/libQt5Widgets.so.5 #31 0x00007fc51ca577d6 in QObject::event(QEvent*) () from /usr/lib/libQt5Core.so.5 #32 0x00007fc51d8362c6 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5 #33 0x00007fc51ca335aa in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5 #34 0x00007fc51ca340a9 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /usr/lib/libQt5Core.so.5 #35 0x00007fc51ca7b678 in ?? () from /usr/lib/libQt5Core.so.5 #36 0x00007fc51aa64163 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0 #37 0x00007fc51aaba9e9 in ?? () from /usr/lib/libglib-2.0.so.0 #38 0x00007fc51aa616c5 in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0 #39 0x00007fc51ca7f57a in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5 #40 0x00007fc51ca2b88b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5 #41 0x00007fc51ca36fd7 in QCoreApplication::exec() () from /usr/lib/libQt5Core.so.5 #42 0x0000565100d304ed in main (argc=<optimized out>, argv=0x7ffc33d5fbe8) at /home/kde-dev/kde/src/gwenview/app/main.cpp:205 [Inferior 1 (process 559583) detached] *** Bug 458114 has been marked as a duplicate of this bug. *** *** Bug 438678 has been marked as a duplicate of this bug. *** *** Bug 459836 has been marked as a duplicate of this bug. *** *** Bug 456549 has been marked as a duplicate of this bug. *** *** Bug 459990 has been marked as a duplicate of this bug. *** I was also hit by this crash. Here's my stacktrace with debug symbols: #0 __memcpy_avx_unaligned_erms () at ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:544 #1 0x00007ffff558e9b0 in memcpy (__len=<optimized out>, __src=<optimized out>, __dest=<optimized out>, __dest=<optimized out>, __src=<optimized out>, __len=<optimized out>) at /usr/include/bits/string_fortified.h:29 #2 QImage::copy (this=0x55555654d5a0, r=...) at image/qimage.cpp:1239 #3 0x00007ffff7d0c651 in Gwenview::RasterImageItem::paint (this=0x55555684bc30, painter=0x7fffffffccc0) at /home/elvis/dev/kde/gwenview/lib/documentview/rasterimageitem.cpp:105 #4 0x00007ffff60a4a32 in QGraphicsScenePrivate::draw (this=this@entry=0x555555a5d9d0, item=item@entry=0x55555684bc30, painter=painter@entry=0x7fffffffccc0, viewTransform=viewTransform@entry=0x0, transformPtr=transformPtr@entry=0x5555566f0910, exposedRegion=exposedRegion@entry=0x555555af2dc0, widget=<optimized out>, opacity=opacity@entry=1, effectTransform=<optimized out>, wasDirtyParentSceneTransform=<optimized out>, drawItem=<optimized out>) at graphicsview/qgraphicsscene.cpp:4981 #5 0x00007ffff60a52b7 in QGraphicsScenePrivate::drawSubtreeRecursive (this=this@entry=0x555555a5d9d0, item=0x55555684bc30, painter=painter@entry=0x7fffffffccc0, viewTransform=viewTransform@entry=0x0, exposedRegion=exposedRegion@entry=0x555555af2dc0, widget=widget@entry=0x555555b73820, parentOpacity=parentOpacity@entry=1, effectTransform=0x0) at graphicsview/qgraphicsscene.cpp:4873 #6 0x00007ffff60a478a in QGraphicsScenePrivate::draw (this=this@entry=0x555555a5d9d0, item=item@entry=0x55555683c740, painter=painter@entry=0x7fffffffccc0, viewTransform=viewTransform@entry=0x0, transformPtr=transformPtr@entry=0x55555684ad20, exposedRegion=exposedRegion@entry=0x555555af2dc0, widget=<optimized out>, opacity=opacity@entry=1, effectTransform=<optimized out>, wasDirtyParentSceneTransform=<optimized out>, drawItem=<optimized out>) at graphicsview/qgraphicsscene.cpp:5013 #7 0x00007ffff60a52b7 in QGraphicsScenePrivate::drawSubtreeRecursive (this=this@entry=0x555555a5d9d0, item=0x55555683c740, painter=painter@entry=0x7fffffffccc0, viewTransform=viewTransform@entry=0x0, exposedRegion=exposedRegion@entry=0x555555af2dc0, widget=widget@entry=0x555555b73820, parentOpacity=parentOpacity@entry=1, effectTransform=0x0) at graphicsview/qgraphicsscene.cpp:4873 #8 0x00007ffff60a478a in QGraphicsScenePrivate::draw (this=0x555555a5d9d0, item=0x5555560d5560, painter=0x7fffffffccc0, viewTransform=<optimized out>, transformPtr=<optimized out>, exposedRegion=<optimized out>, widget=<optimized out>, opacity=<optimized out>, effectTransform=<optimized out>, wasDirtyParentSceneTransform=<optimized out>, drawItem=<optimized out>) at graphicsview/qgraphicsscene.cpp:5013 #9 0x00007ffff607be0c in QGraphicsItemEffectSourcePrivate::draw (this=0x55555605b690, painter=0x7fffffffccc0) at graphicsview/qgraphicsitem.cpp:11331 #10 0x00007ffff6109f1a in QGraphicsEffectSource::draw (this=0x5555566dcb60, painter=0x7fffffffccc0) at effects/qgraphicseffect_p.h:90 #11 0x00007ffff60a56b4 in QGraphicsScenePrivate::drawSubtreeRecursive (this=<optimized out>, item=<optimized out>, painter=0x7fffffffccc0, viewTransform=<optimized out>, exposedRegion=0x555555af2dc0, widget=0x555555b73820, parentOpacity=<optimized out>, effectTransform=0x0) at graphicsview/qgraphicsscene.cpp:4867 #12 0x00007ffff60c84a4 in QGraphicsScenePrivate::drawItems (widget=0x555555b73820, exposedRegion=<optimized out>, viewTransform=0x0, painter=0x7fffffffccc0, this=<optimized out>) at graphicsview/qgraphicsscene.cpp:4735 #13 QGraphicsView::paintEvent (this=<optimized out>, event=<optimized out>) at graphicsview/qgraphicsview.cpp:3561 #14 0x00007ffff5daf514 in QWidget::event (this=0x555555a81d00, event=0x7fffffffd040) at kernel/qwidget.cpp:8826 #15 0x00007ffff5e5dac3 in QFrame::event (this=0x555555a81d00, e=0x7fffffffd040) at widgets/qframe.cpp:550 #16 0x00007ffff4e8cc02 in QCoreApplicationPrivate::sendThroughObjectEventFilters (receiver=receiver@entry=0x555555b73820, event=event@entry=0x7fffffffd040) at kernel/qcoreapplication.cpp:1190 #17 0x00007ffff5d78b4c in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x555555b73820, e=0x7fffffffd040) at kernel/qapplication.cpp:3634 #18 0x00007ffff4e8cf98 in QCoreApplication::notifyInternal2 (receiver=0x555555b73820, event=0x7fffffffd040) at kernel/qcoreapplication.cpp:1064 #19 0x00007ffff5da33db in QWidgetPrivate::sendPaintEvent (this=this@entry=0x555555b73980, toBePainted=...) at kernel/qwidget.cpp:5479 #20 0x00007ffff5da47b6 in QWidgetPrivate::drawWidget (this=0x555555b73980, pdev=0x5555566e4808, rgn=..., offset=..., flags=..., sharedPainter=<optimized out>, repaintManager=<optimized out>) at kernel/qwidget.cpp:5429 #21 0x00007ffff5d84890 in QWidgetRepaintManager::paintAndFlush (this=0x555555eba0b0) at kernel/qwidgetrepaintmanager.cpp:1016 #22 0x00007ffff5daf1e4 in QWidget::event (this=0x5555558cc8f0, event=0x555555ed3f00) at kernel/qwidget.cpp:8990 #23 0x00007ffff74c527e in KXmlGuiWindow::event (this=0x5555558cc8f0, ev=0x555555ed3f00) at /usr/src/debug/kxmlgui/kxmlgui-5.101.0/src/kxmlguiwindow.cpp:220 #24 0x00007ffff5d78b5c in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x5555558cc8f0, e=0x555555ed3f00) at kernel/qapplication.cpp:3640 #25 0x00007ffff4e8cf98 in QCoreApplication::notifyInternal2 (receiver=0x5555558cc8f0, event=0x555555ed3f00) at kernel/qcoreapplication.cpp:1064 #26 0x00007ffff4e8daa3 in QCoreApplicationPrivate::sendPostedEvents (receiver=0x5555558cc8f0, event_type=77, data=0x555555693910) at kernel/qcoreapplication.cpp:1821 #27 0x00007ffff60af9df in QGraphicsViewPrivate::dispatchPendingUpdateRequests (this=<optimized out>) at ../../include/QtWidgets/5.15.8/QtWidgets/private/../../../../../src/widgets/graphicsview/qgraphicsview_p.h:191 #28 QGraphicsViewPrivate::dispatchPendingUpdateRequests (this=0x555555af2900) at ../../include/QtWidgets/5.15.8/QtWidgets/private/../../../../../src/widgets/graphicsview/qgraphicsview_p.h:186 #29 QGraphicsScenePrivate::_q_processDirtyItems (this=0x555555a5d9d0) at graphicsview/qgraphicsscene.cpp:516 #30 QGraphicsScene::qt_static_metacall (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>) at .moc/moc_qgraphicsscene.cpp:197 #31 0x00007ffff4eb0bd0 in QObject::event (this=0x555555a81f00, e=0x7fffe4007b40) at kernel/qobject.cpp:1347 #32 0x00007ffff5d78b5c in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x555555a81f00, e=0x7fffe4007b40) at kernel/qapplication.cpp:3640 #33 0x00007ffff4e8cf98 in QCoreApplication::notifyInternal2 (receiver=0x555555a81f00, event=0x7fffe4007b40) at kernel/qcoreapplication.cpp:1064 #34 0x00007ffff4e8daa3 in QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0x555555693910) at kernel/qcoreapplication.cpp:1821 #35 0x00007ffff4ed3ea8 in postEventSourceDispatch (s=0x5555556bd490) at kernel/qeventdispatcher_glib.cpp:277 #36 0x00007ffff3df187b in g_main_dispatch (context=0x7fffe8005010) at ../glib/glib/gmain.c:3454 #37 g_main_context_dispatch (context=0x7fffe8005010) at ../glib/glib/gmain.c:4172 #38 0x00007ffff3e48c89 in g_main_context_iterate.constprop.0 (context=0x7fffe8005010, block=1, dispatch=1, self=<optimized out>) at ../glib/glib/gmain.c:4248 #39 0x00007ffff3df0132 in g_main_context_iteration (context=0x7fffe8005010, may_block=1) at ../glib/glib/gmain.c:4313 #40 0x00007ffff4ed7c8c in QEventDispatcherGlib::processEvents (this=0x555555665350, flags=...) at kernel/qeventdispatcher_glib.cpp:423 #41 0x00007ffff4e8574c in QEventLoop::exec (this=0x7fffffffdbc0, flags=...) at ../../include/QtCore/../../src/corelib/global/qflags.h:69 #42 0x00007ffff4e90269 in QCoreApplication::exec () at ../../include/QtCore/../../src/corelib/global/qflags.h:121 #43 0x00005555555e0a5b in main (argc=1, argv=0x7fffffffdf98) at /home/elvis/dev/kde/gwenview/app/main.cpp:213 I was trying to get a valgrind log, but it does not crash while running from valgrind. *** Bug 466628 has been marked as a duplicate of this bug. *** A possibly relevant merge request was started @ https://invent.kde.org/graphics/gwenview/-/merge_requests/189 Git commit 5ddac2cc9ff426302771fb6c7aceae02953b945e by Nate Graham, on behalf of Nikita Karpei. Committed on 29/03/2023 at 18:53. Pushed by ngraham into branch 'master'. Save a shallow copy of the original image when rotating FIXED-IN: 23.04 The app crashes when trying to get an image from a document using document->image(). Looks like it can be destroyed from another thread so we should make a shallow copy of it. It's fast and fixes the crash. M +11 -8 lib/documentview/rasterimageitem.cpp M +1 -0 lib/documentview/rasterimageitem.h https://invent.kde.org/graphics/gwenview/commit/5ddac2cc9ff426302771fb6c7aceae02953b945e Git commit 8e8b025b79b44db957d164698b68681323b9a917 by Nate Graham, on behalf of Nikita Karpei. Committed on 29/03/2023 at 18:53. Pushed by ngraham into branch 'release/23.04'. Save a shallow copy of the original image when rotating FIXED-IN: 23.04 The app crashes when trying to get an image from a document using document->image(). Looks like it can be destroyed from another thread so we should make a shallow copy of it. It's fast and fixes the crash. (cherry picked from commit 5ddac2cc9ff426302771fb6c7aceae02953b945e) M +11 -8 lib/documentview/rasterimageitem.cpp M +1 -0 lib/documentview/rasterimageitem.h https://invent.kde.org/graphics/gwenview/commit/8e8b025b79b44db957d164698b68681323b9a917 I am able to replicate this bug on Plasma 5.27.3, Qt 5.15.6 and frameworks 5.104.0 The fix is in Gwenview itself (the next released version, specifically), not any of those products. *** Bug 468273 has been marked as a duplicate of this bug. *** *** Bug 468351 has been marked as a duplicate of this bug. *** *** Bug 468763 has been marked as a duplicate of this bug. *** *** Bug 469754 has been marked as a duplicate of this bug. *** *** Bug 469605 has been marked as a duplicate of this bug. *** *** Bug 470479 has been marked as a duplicate of this bug. *** *** Bug 468426 has been marked as a duplicate of this bug. *** *** Bug 471926 has been marked as a duplicate of this bug. *** *** Bug 453207 has been marked as a duplicate of this bug. *** Created attachment 163610 [details]
New crash information added by DrKonqi
gwenview (21.12.3) using Qt 5.15.2
- What I was doing when the application crashed:
I have Gwenview 21.12.3, with the following:
Operating System: openSUSE Leap 15.4
KDE Plasma Version: 5.24.4
KDE Frameworks Version: 5.90.0
Qt Version: 5.15.2
Kernel Version: 5.14.21-150400.24.97-default (64-bit)
Graphics Platform: X11
Processors: 4 × Intel® Xeon® CPU 5150 @ 2.66GHz
Memory: 15.6 GiB of RAM
Graphics Processor: llvmpipe
All software installed from the official repos.
I have been experiencing this bug intermittently with Gwenview for at leaast 2 years. It seems to be very random and difficult to reproduce. Sometimes it will happen several times in a row. At others it won't happen for days or weeks. I use Gwenview nearly every day to look at photo's or graphic files.
-- Backtrace (Reduced):
#5 0x00007efc255de34e in memcpy (__len=13824, __src=0x7efbc70c9f10, __dest=<optimized out>) at /usr/include/bits/string_fortified.h:34
#6 QImage::copy (this=0x55b8981c0b10, r=...) at image/qimage.cpp:1239
#7 0x00007efc2a2d6412 in Gwenview::RasterImageItem::paint (this=0x55b89859b100, painter=0x7fffc4076920) at /usr/src/debug/gwenview5-21.12.3-bp154.1.31.x86_64/lib/documentview/rasterimageitem.cpp:106
#8 0x00007efc25fffb66 in QGraphicsScenePrivate::draw (this=this@entry=0x55b897db64f0, item=item@entry=0x55b89859b100, painter=painter@entry=0x7fffc4076920, viewTransform=<optimized out>, transformPtr=transformPtr@entry=0x55b898867eb0, exposedRegion=<optimized out>, widget=<optimized out>, opacity=opacity@entry=1, effectTransform=<optimized out>, wasDirtyParentSceneTransform=<optimized out>, drawItem=<optimized out>) at graphicsview/qgraphicsscene.cpp:4981
#9 0x00007efc2600034e in QGraphicsScenePrivate::drawSubtreeRecursive (this=this@entry=0x55b897db64f0, item=0x55b89859b100, painter=painter@entry=0x7fffc4076920, viewTransform=viewTransform@entry=0x0, exposedRegion=exposedRegion@entry=0x55b8981ad240, widget=<optimized out>, widget@entry=0x55b897f14e50, parentOpacity=parentOpacity@entry=1, effectTransform=0x0) at graphicsview/qgraphicsscene.cpp:4873
*** Bug 481837 has been marked as a duplicate of this bug. *** |