Avoid crash in wxBitmap::GetImage() for invalid bitmaps

Just return NULL from this (wxOSX private, in spite of not using a
port-specific prefix) method.

This fixes crash in wxButton::SetBitmapXXX(wxNullBitmap), as shown by
the new test case which used to crash but doesn't do it any longer.

Closes #19257.
This commit is contained in:
Vadim Zeitlin 2021-09-03 00:28:58 +02:00
parent 0455e25302
commit ff4cd70412
3 changed files with 7 additions and 1 deletions

View File

@ -204,6 +204,7 @@ public:
// returns a CGImageRef which must released after usage with CGImageRelease
CGImageRef CreateCGImage() const ;
// returns nil for invalid bitmap
WXImage GetImage() const;
#if wxOSX_USE_COCOA
// returns an autoreleased version of the image

View File

@ -951,7 +951,7 @@ bool wxBitmap::Create(CGContextRef bitmapcontext)
WXImage wxBitmap::GetImage() const
{
return GetBitmapData()->GetImage();
return IsOk() ? GetBitmapData()->GetImage() : NULL;
}
wxBitmap wxBitmap::GetSubBitmap(const wxRect &rect) const

View File

@ -160,6 +160,11 @@ TEST_CASE_METHOD(ButtonTestCase, "Button::Bitmap", "[button]")
// updating the bitmap later, as it used to be the case in wxGTK (#18898).
m_button->SetLabel(wxString());
CHECK_NOTHROW( m_button->Disable() );
// Also check that setting an invalid bitmap doesn't do anything untoward,
// such as crashing, as it used to do in wxOSX (#19257).
CHECK_NOTHROW( m_button->SetBitmapPressed(wxNullBitmap) );
CHECK( !m_button->GetBitmapPressed().IsOk() );
}
#endif //wxUSE_BUTTON