Package: arora
Version: 0.11.0-1
Severity: normal
Tags: patch

This bugs has been present for a long time, and I devoted an evening to its
analysis and - perhaps - solution.

Compiling with symbols included revealed that the problem appeared in the
bookmarks destructor code. I also saw that the bug didn't occur with an empty
bookmark list, and that it occurs when stopping a freshly started browser.

Armed with a pretty good LACK of knowledge of C++ and Qt library, I tweaked the
destructor code to what appeared reasonable in order to avoid a double free
condition.

The changes seem to have cured the problem, and the bookmark management doesn't
seem to have suffered either - deleting a sub-folder works and doesn't crash
the browser.

So, please forward the patch to the maintainer for validation.



-- System Information:
Debian Release: jessie/sid
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'stable-updates'), (300, 'unstable'),
(200, 'stable'), (1, 'experimental')
Architecture: i386 (x86_64)
Foreign Architectures: amd64

Kernel: Linux 3.11-1-amd64 (SMP w/1 CPU core)
Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ISO-8859-1)
Shell: /bin/sh linked to /bin/bash

Versions of packages arora depends on:
ii  libc6           2.17-97
ii  libgcc1         1:4.8.2-12
ii  libqt4-network  4:4.8.5+git209-g718fae5+dfsg-1
ii  libqt4-script   4:4.8.5+git209-g718fae5+dfsg-1
ii  libqt4-sql      4:4.8.5+git209-g718fae5+dfsg-1
ii  libqtcore4      4:4.8.5+git209-g718fae5+dfsg-1
ii  libqtgui4       4:4.8.5+git209-g718fae5+dfsg-1
ii  libqtwebkit4    2.2.1-7
ii  libstdc++6      4.8.2-12

arora recommends no packages.

arora suggests no packages.
diff -rNu arora-git/src/bookmarks/bookmarknode.cpp arora/src/bookmarks/bookmarknode.cpp
--- arora-git/src/bookmarks/bookmarknode.cpp	2014-01-20 22:14:59.122745830 +0100
+++ arora/src/bookmarks/bookmarknode.cpp	2014-01-20 21:55:43.068049643 +0100
@@ -73,9 +73,10 @@
 
 BookmarkNode::~BookmarkNode()
 {
+    if (m_parent == 0) { return; }
+    qDeleteAll(m_children);
     if (m_parent)
         m_parent->remove(this);
-    qDeleteAll(m_children);
     m_parent = 0;
     m_type = BookmarkNode::Root;
 }
diff -rNu arora-git/src/bookmarks/bookmarknode.cpp arora/src/bookmarks/bookmarknode.cpp
--- arora-git/src/bookmarks/bookmarknode.cpp	2014-01-20 22:14:59.122745830 +0100
+++ arora/src/bookmarks/bookmarknode.cpp	2014-01-20 21:55:43.068049643 +0100
@@ -73,9 +73,10 @@
 
 BookmarkNode::~BookmarkNode()
 {
+    if (m_parent == 0) { return; }
+    qDeleteAll(m_children);
     if (m_parent)
         m_parent->remove(this);
-    qDeleteAll(m_children);
     m_parent = 0;
     m_type = BookmarkNode::Root;
 }

Reply via email to