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:
wmayer
2024-04-06 02:12:04 +02:00
parent 262a218b6b
commit 15dcd1e9be
5 changed files with 30 additions and 13 deletions

View File

@@ -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 ) ) {