eeschema: fix use-after-free crash in GetScreen()/GetCurrentSheet()

This commit is contained in:
Tomasz Włostowski 2019-05-20 20:54:44 +02:00
parent 034669bf30
commit aff3243f3b
3 changed files with 15 additions and 4 deletions

View File

@ -239,7 +239,9 @@ bool SCH_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in
{
SetScreen( nullptr );
delete g_RootSheet;
g_RootSheet = NULL;
if( g_CurrentSheet )
g_CurrentSheet->clear();
g_RootSheet = nullptr;
CreateScreens();
}

View File

@ -489,12 +489,18 @@ void SCH_EDIT_FRAME::SetSheetNumberAndCount()
SCH_SCREEN* SCH_EDIT_FRAME::GetScreen() const
{
if( !g_CurrentSheet )
return nullptr;
return g_CurrentSheet->LastScreen();
}
wxString SCH_EDIT_FRAME::GetScreenDesc() const
{
if(! g_CurrentSheet )
return wxT("<unknown>");
wxString s = g_CurrentSheet->PathHumanReadable();
return s;
@ -748,8 +754,12 @@ void SCH_EDIT_FRAME::OnUpdateRemapSymbols( wxUpdateUIEvent& aEvent )
void SCH_EDIT_FRAME::OnUpdateSaveSheet( wxUpdateUIEvent& aEvent )
{
aEvent.Enable( GetScreen()->IsModify() );
auto screen = GetScreen();
if( !screen )
return;
aEvent.Enable( screen->IsModify() );
}

View File

@ -125,9 +125,9 @@ int SCH_MOVE_TOOL::Main( const TOOL_EVENT& aEvent )
};
KIGFX::VIEW_CONTROLS* controls = getViewControls();
controls->SetSnapping( true );
VECTOR2I originalCursorPos = controls->GetCursorPosition();
bool moveMode;
// Be sure that there is at least one item that we can move. If there's no selection try
// looking for the stuff under mouse cursor (i.e. Kicad old-style hover selection).
@ -463,7 +463,6 @@ void SCH_MOVE_TOOL::getConnectedDragItems( SCH_ITEM* aOriginalItem, wxPoint aPoi
switch( test->Type() )
{
default:
case SCH_LINE_T:
{
// Select the connected end of wires/bus connections.