Gui: add security checks to view provider extensions because they can be accessed if a document objects is not yet attached
This commit is contained in:
@@ -62,7 +62,8 @@ ViewProviderOriginGroupExtension::~ViewProviderOriginGroupExtension()
|
||||
std::vector<App::DocumentObject*> ViewProviderOriginGroupExtension::constructChildren (
|
||||
const std::vector<App::DocumentObject*> &children ) const
|
||||
{
|
||||
auto* group = getExtendedViewProvider()->getObject()->getExtensionByType<App::OriginGroupExtension>();
|
||||
auto* obj = getExtendedViewProvider()->getObject();
|
||||
auto* group = obj ? obj->getExtensionByType<App::OriginGroupExtension>() : nullptr;
|
||||
if(!group)
|
||||
return children;
|
||||
|
||||
@@ -108,7 +109,8 @@ void ViewProviderOriginGroupExtension::extensionAttach(App::DocumentObject *pcOb
|
||||
|
||||
void ViewProviderOriginGroupExtension::extensionUpdateData( const App::Property* prop ) {
|
||||
|
||||
auto* group = getExtendedViewProvider()->getObject()->getExtensionByType<App::OriginGroupExtension>();
|
||||
auto* obj = getExtendedViewProvider()->getObject();
|
||||
auto* group = obj ? obj->getExtensionByType<App::OriginGroupExtension>() : nullptr;
|
||||
if ( group && prop == &group->Group ) {
|
||||
updateOriginSize();
|
||||
}
|
||||
@@ -117,7 +119,8 @@ void ViewProviderOriginGroupExtension::extensionUpdateData( const App::Property*
|
||||
}
|
||||
|
||||
void ViewProviderOriginGroupExtension::slotChangedObjectApp ( const App::DocumentObject& obj) {
|
||||
auto* group = getExtendedViewProvider()->getObject()->getExtensionByType<App::OriginGroupExtension>();
|
||||
auto* ext = getExtendedViewProvider()->getObject();
|
||||
auto* group = ext ? ext->getExtensionByType<App::OriginGroupExtension>() : nullptr;
|
||||
if ( group && group->hasObject (&obj, /*recursive=*/ true ) ) {
|
||||
updateOriginSize ();
|
||||
}
|
||||
@@ -127,7 +130,8 @@ void ViewProviderOriginGroupExtension::slotChangedObjectGui ( const Gui::ViewPro
|
||||
if ( !vp.isDerivedFrom ( Gui::ViewProviderOriginFeature::getClassTypeId () )) {
|
||||
// Ignore origins to avoid infinite recursion (not likely in a well-formed document,
|
||||
// but may happen in documents designed in old versions of assembly branch )
|
||||
auto* group = getExtendedViewProvider()->getObject()->getExtensionByType<App::OriginGroupExtension>();
|
||||
auto* ext = getExtendedViewProvider()->getObject();
|
||||
auto* group = ext ? ext->getExtensionByType<App::OriginGroupExtension>() : nullptr;
|
||||
App::DocumentObject *obj = vp.getObject ();
|
||||
|
||||
if ( group && obj && group->hasObject (obj, /*recursive=*/ true ) ) {
|
||||
|
||||
Reference in New Issue
Block a user