From kde-core-devel Thu Jul 18 18:17:44 2002 From: Waldo Bastian Date: Thu, 18 Jul 2002 18:17:44 +0000 To: kde-core-devel Subject: Invalid reads in handling of accels X-MARC-Message: https://marc.info/?l=kde-core-devel&m=102701646802443 MIME-Version: 1 Content-Type: multipart/mixed; boundary="--Boundary-00=_IZwN9I/ZccywJkq" --Boundary-00=_IZwN9I/ZccywJkq Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline With the latest qt-copy (post Qt-3.05 development snapshot I believe?)=20 valgrind reports invalid reads within Qt code (See backtrace below) I have not tested other Qt versions. The problem is that Qt expects the parent of the QAccel to be a widget, but= in=20 the case of KDE it is usually a KActionCollection Running a KDE application with the attached patch to qaccel.cpp highlights = the=20 problem. (Just press a few keys) Cheers, Waldo =3D=3D18914=3D=3D Invalid read of size 4 =3D=3D18914=3D=3D at 0x40FEC3FC: ??? (.moc/debug-mt/../../kernel/qwidget= =2Eh:674) =3D=3D18914=3D=3D by 0x40C1F4DA: QAccel::eventFilter(QObject *, QEvent *= )=20 (kernel/qaccel.cpp:493) =3D=3D18914=3D=3D by 0x40C69F1E: QObject::activate_filters(QEvent *)=20 (kernel/qobject.cpp:779) =3D=3D18914=3D=3D by 0x40C69D35: QObject::event(QEvent *) (kernel/qobjec= t.cpp:655) =3D=3D18914=3D=3D by 0x40C9AD55: QWidget::event(QEvent *) (kernel/qwidge= t.cpp:4220) =3D=3D18914=3D=3D by 0x40D31FE4: QMainWindow::event(QEvent *)=20 (widgets/qmainwindow.cpp:1609) =3D=3D18914=3D=3D by 0x40C23979: QApplication::internalNotify(QObject *,= QEvent *)=20 (kernel/qapplication.cpp:2209) =3D=3D18914=3D=3D by 0x40C236D8: QApplication::notify(QObject *, QEvent = *)=20 (kernel/qapplication.cpp:2157) =3D=3D18914=3D=3D by 0x408B08B5: KApplication::notify(QObject *, QEvent = *)=20 (kapplication.cpp:556) =3D=3D18914=3D=3D by 0x40FE9D24: ???=20 (.moc/debug-mt/../../kernel/qapplication.h:444) =3D=3D18914=3D=3D by 0x40BCFDF9: QETWidget::translateKeyEvent(_XEvent co= nst *,=20 bool) (kernel/qapplication_x11.cpp:5419) =3D=3D18914=3D=3D by 0x40BCB78B: QApplication::x11ProcessEvent(_XEvent *= )=20 (kernel/qapplication_x11.cpp:3613) =3D=3D18914=3D=3D by 0x40BCA019: QApplication::processNextEvent(bool)=20 (kernel/qapplication_x11.cpp:3090) =3D=3D18914=3D=3D by 0x40C25614: QApplication::enter_loop(void)=20 (kernel/qapplication.cpp:3089) =3D=3D18914=3D=3D by 0x40BC9F1B: QApplication::exec(void)=20 (kernel/qapplication_x11.cpp:3045) =3D=3D18914=3D=3D by 0x402754E4: main (konq_main.cc:136) =3D=3D18914=3D=3D by 0x4132C7EE: __libc_start_main (in /lib/libc.so.6) =3D=3D18914=3D=3D by 0x80485E1: __libc_start_main@@GLIBC_2.0 (in=20 /ext/kde-head/bin/konqueror) =3D=3D18914=3D=3D Address 0x47F88EC8 is not stack'd, malloc'd or free'd =2D-=20 bastian@kde.org | SuSE Labs KDE Developer | bastian@suse.com --Boundary-00=_IZwN9I/ZccywJkq Content-Type: text/x-diff; charset="us-ascii"; name="qaccel.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="qaccel.patch" Index: qaccel.cpp =================================================================== RCS file: /home/kde/qt-copy/src/kernel/qaccel.cpp,v retrieving revision 1.43 diff -u -p -r1.43 qaccel.cpp --- qaccel.cpp 2002/07/12 21:52:49 1.43 +++ qaccel.cpp 2002/07/18 18:09:45 @@ -485,6 +485,10 @@ bool QAccel::eventFilter( QObject *o, QE /* if we live in a MDI subwindow, ignore the event if we are not the active document window */ + if (!parent()->inherits("QWidget")) + { + qWarning("QAccel::eventFilter: parent is %s, not a QWidget!", parent()->className()); + } QWidget* w = (QWidget*) parent(); while ( w && !w->testWFlags( WSubWindow ) ) w = w->parentWidget( TRUE ); --Boundary-00=_IZwN9I/ZccywJkq--