pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

pkg/53377: Qt4 crashes



>Number:         53377
>Category:       pkg
>Synopsis:       Qt4 crashes
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Jun 16 23:15:00 +0000 2018
>Originator:     Christian Hattemer
>Release:        pkgsrc-current, 2018-06-16
>Organization:
>Environment:
NetBSD webster.lan 8.0_RC1 NetBSD 8.0_RC1 (GENERIC)
>Description:
qt4-libs-4.8.7nb14 crashes when executing
webView->setUrl(QUrl(QString::fromUtf8("about:blank")));
on a QWebView object.

There has been a Qt-related change in src recently, this installation includes it.
>How-To-Repeat:
In case PR pkg/53376 isn't resolved yet apply the patches locally, otherwise you wouldn't be able to build the pkg.

Install geography/qlandkartegt from pkgsrc and run it.

Press the right mouse button on the map view in the center. It's not necessary to load a map for this. From the context menu select to create a new waypoint.

The Edit Waypoint dialog should appear, but it does segfault instead.

This happens deep in Qt, in the memory allocator, it seems. The gdb bt is:
#0  0x000072ede3cb26ab in WTF::OSAllocator::reserveAndCommit(unsigned long, WTF::OSAllocator::Usage, bool, bool) () from /usr/pkg/qt4/lib/libjscore.so.4
[Current thread is 1 (LWP 1)]
(gdb) bt
#0  0x000072ede3cb26ab in WTF::OSAllocator::reserveAndCommit(unsigned long, WTF::OSAllocator::Usage, bool, bool) () from /usr/pkg/qt4/lib/libjscore.so.4
#1  0x000072ede3cef84e in JSC::ExecutableAllocator::isValid() const ()
   from /usr/pkg/qt4/lib/libjscore.so.4
#2  0x000072ede3d7516c in JSC::JSGlobalData::JSGlobalData(JSC::JSGlobalData::GlobalDataType, JSC::ThreadStackType) () from /usr/pkg/qt4/lib/libjscore.so.4
#3  0x000072ede3d77c94 in JSC::JSGlobalData::create(JSC::ThreadStackType) ()
   from /usr/pkg/qt4/lib/libjscore.so.4
#4  0x000072ede3d77cbd in JSC::JSGlobalData::createLeaked(JSC::ThreadStackType)
    () from /usr/pkg/qt4/lib/libjscore.so.4
#5  0x000072ede48bab61 in WebCore::JSDOMWindowBase::commonJSGlobalData() ()
   from /usr/pkg/qt4/lib/libwebcore.so.4
#6  0x000072ede490cbc6 in WebCore::ScriptController::getAllWorlds(WTF::Vector<WebCore::DOMWrapperWorld*, 0ul>&) () from /usr/pkg/qt4/lib/libwebcore.so.4
#7  0x000072ede4c7f186 in WebCore::FrameLoader::dispatchDidClearWindowObjectsInAllWorlds() () from /usr/pkg/qt4/lib/libwebcore.so.4
#8  0x000072ede4c800df in WebCore::FrameLoader::didBeginDocument(bool) ()
   from /usr/pkg/qt4/lib/libwebcore.so.4
#9  0x000072ede4c7a7be in WebCore::DocumentWriter::begin(WebCore::KURL const&, bool, WebCore::SecurityOrigin*) () from /usr/pkg/qt4/lib/libwebcore.so.4
#10 0x000072ede4c7ab51 in WebCore::DocumentWriter::begin() ()
   from /usr/pkg/qt4/lib/libwebcore.so.4
#11 0x000072edf3cd7e91 in QWebFrame::setUrl(QUrl const&) ()
   from /usr/pkg/qt4/lib/libQtWebKit.so.4
#12 0x000000000053eb39 in Ui_IDlgMapTDBConfig::setupUi (
    IDlgMapTDBConfig=0x72edefd4c340, this=0x72edefd4c368)
    at /usr/pkgsrc/geography/qlandkartegt/work/qlandkartegt-1.8.1/src/ui_IDlgMapTDBConfig.h:40
#13 CDlgMapTDBConfig::CDlgMapTDBConfig (this=0x72edefd4c340, 
    map=0x72edf19af400)
    at /usr/pkgsrc/geography/qlandkartegt/work/qlandkartegt-1.8.1/src/CDlgMapTDBConfig.cpp:61
#14 0x000000000069113b in CMapTDB::config (this=0x72edf19af400)
    at /usr/pkgsrc/geography/qlandkartegt/work/qlandkartegt-1.8.1/src/CMapTDB.cpp:3640
#15 0x000072edf55a18c6 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/pkg/qt4/lib/libQtCore.so.4
#16 0x000072edf5cf43b2 in QAction::triggered(bool) ()
   from /usr/pkg/qt4/lib/libQtGui.so.4
#17 0x000072edf5cf53f8 in QAction::activate(QAction::ActionEvent) ()
   from /usr/pkg/qt4/lib/libQtGui.so.4
#18 0x000072edf6076361 in QMenuPrivate::activateCausedStack(QList<QPointer<QWidget> > const&, QAction*, QAction::ActionEvent, bool) ()
   from /usr/pkg/qt4/lib/libQtGui.so.4
...

(Actually this tb shows opening the Edit Map dialog which exhibits the same behaviour. Sorry, I don't have the other tb at hand now, but it's very similar.)

The interesting frame is #12. This file was generated by the UI compiler and makes the call shown in the description.

Removing the call removes the crash.

This is NetBSD 8/amd64 with qt4-libs-4.8.7nb14.
The crash doesn't happen on NetBSD 6.1/i386 with qt4-libs-4.8.6nb3 and the same version of QLandkarteGT.
>Fix:
A stopgap solution is to add these patches. This removes the QWebView from the Edit Waypoint dialog and thus eliminates the crash. QWebView widgets also appear in other places, e. g. in the Edit Map dialog, these still crash.

patch-src_IDlgEditWpt.ui:
$NetBSD$

--- src/IDlgEditWpt.ui.orig	2014-08-08 09:53:40.000000000 +0000
+++ src/IDlgEditWpt.ui
@@ -308,15 +308,6 @@
         </attribute>
         <layout class="QVBoxLayout" name="verticalLayout_5">
          <item>
-          <widget class="QWebView" name="webView">
-           <property name="url">
-            <url>
-             <string>about:blank</string>
-            </url>
-           </property>
-          </widget>
-         </item>
-         <item>
           <widget class="QCheckBox" name="checkHint">
            <property name="text">
             <string>Show hidden information</string>


patch-src_CDlgEditWpt.cpp:
$NetBSD$

--- src/CDlgEditWpt.cpp.orig	2015-02-03 08:38:09.000000000 +0000
+++ src/CDlgEditWpt.cpp
@@ -69,8 +69,6 @@ CDlgEditWpt::CDlgEditWpt(CWpt &wpt, QWid
     labelUnitElevation->setText(IUnit::self().baseunit);
     labelUnitProximity->setText(IUnit::self().baseunit);
 
-    connect(webView, SIGNAL(linkClicked( const QUrl&)), this, SLOT(slotOpenLink(const QUrl&)));
-
     if(wpt.isGeoCache())
     {
         toolIcon->setEnabled(false);
@@ -228,8 +226,6 @@ int CDlgEditWpt::exec()
             pushCreateBuddies->show();
         }
 
-        webView->setHtml(html);
-        webView->page()->setLinkDelegationPolicy( QWebPage::DelegateAllLinks );
         checkHint->setEnabled(wpt.hasHiddenInformation());
 
     }
@@ -239,11 +235,6 @@ int CDlgEditWpt::exec()
         //        checkExportBuddies->hide();
         pushCreateBuddies->hide();
         checkHint->hide();
-
-        if(!link.isEmpty())
-        {
-            webView->setUrl(link);
-        }
     }
 
     QStringList caches;
@@ -568,7 +559,6 @@ void CDlgEditWpt::slotToggleHint(bool sh
             }
         }
     }
-    webView->setHtml(html);
 }
 
 


Home | Main Index | Thread Index | Old Index