dc0b3e
From b6b0f7b99b68c66ea2b5e8e507c52801796b4d97 Mon Sep 17 00:00:00 2001
dc0b3e
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
dc0b3e
Date: Wed, 18 Oct 2017 11:05:20 +0100
dc0b3e
Subject: [PATCH] a11y: crash in use after dispose
dc0b3e
dc0b3e
calc, chart in tab 3 with a11y enabled, select chart
dc0b3e
switch to tab 1, crash cause mpParent has been deleted, IsDisposed
dc0b3e
is correctly set, but shape accesses parent anyway
dc0b3e
dc0b3e
Change-Id: I6f57a798bfcc82eebb883291cec54e157ff5187b
dc0b3e
dc0b3e
potential deref of empty xStateSet
dc0b3e
dc0b3e
Change-Id: I83d876b0d966b18cdf85249b7e856e4e4f4dec27
dc0b3e
---
dc0b3e
 svx/source/accessibility/AccessibleShape.cxx | 6 ++++--
dc0b3e
 1 file changed, 4 insertions(+), 2 deletions(-)
dc0b3e
dc0b3e
diff --git a/svx/source/accessibility/AccessibleShape.cxx b/svx/source/accessibility/AccessibleShape.cxx
dc0b3e
index 043ba8e..47c0aca 100644
dc0b3e
--- a/svx/source/accessibility/AccessibleShape.cxx
dc0b3e
+++ b/svx/source/accessibility/AccessibleShape.cxx
dc0b3e
@@ -410,7 +410,9 @@ uno::Reference<XAccessibleStateSet> SAL_CALL
dc0b3e
     ::osl::MutexGuard aGuard (maMutex);
dc0b3e
     Reference<XAccessibleStateSet> xStateSet;
dc0b3e
 
dc0b3e
-    if (IsDisposed())
dc0b3e
+    bool bDisposed = IsDisposed();
dc0b3e
+
dc0b3e
+    if (bDisposed)
dc0b3e
     {
dc0b3e
         // Return a minimal state set that only contains the DEFUNC state.
dc0b3e
         xStateSet = AccessibleContextBase::getAccessibleStateSet ();
dc0b3e
@@ -461,7 +463,7 @@ uno::Reference<XAccessibleStateSet> SAL_CALL
dc0b3e
             xStateSet.set( new ::utl::AccessibleStateSetHelper (*pStateSet));
dc0b3e
         }
dc0b3e
     }
dc0b3e
-    if (mpParent && mpParent->IsDocumentSelAll())
dc0b3e
+    if (!bDisposed && xStateSet.is() && mpParent && mpParent->IsDocumentSelAll())
dc0b3e
     {
dc0b3e
         ::utl::AccessibleStateSetHelper* pStateSet =
dc0b3e
             static_cast< ::utl::AccessibleStateSetHelper*>(xStateSet.get());
dc0b3e
-- 
dc0b3e
2.9.5
dc0b3e