@@ -463,6 +463,13 @@ void QgsMapRenderer::render( QPainter* painter, double* forceWidthScale )
463463 QgsDebugMsg ( " Caching enabled but layer redraw forced by extent change or empty cache" );
464464 QImage * mypImage = new QImage ( mRenderContext .painter ()->device ()->width (),
465465 mRenderContext .painter ()->device ()->height (), QImage::Format_ARGB32 );
466+ if ( mypImage->isNull () )
467+ {
468+ QgsDebugMsg ( " insufficient memory for image " + QString::number (mRenderContext .painter ()->device ()->width ()) + " x" + QString::number (mRenderContext .painter ()->device ()->height ()) );
469+ emit drawError ( ml );
470+ painter->end (); // drawError is not caught by anyone, so we end painting to notify caller
471+ return ;
472+ }
466473 mypImage->fill ( 0 );
467474 ml->setCacheImage ( mypImage ); // no need to delete the old one, maplayer does it for you
468475 QPainter * mypPainter = new QPainter ( ml->cacheImage () );
@@ -501,6 +508,13 @@ void QgsMapRenderer::render( QPainter* painter, double* forceWidthScale )
501508 flattenedLayer = true ;
502509 mypFlattenedImage = new QImage ( mRenderContext .painter ()->device ()->width (),
503510 mRenderContext .painter ()->device ()->height (), QImage::Format_ARGB32 );
511+ if ( mypFlattenedImage->isNull () )
512+ {
513+ QgsDebugMsg ( " insufficient memory for image " + QString::number (mRenderContext .painter ()->device ()->width ()) + " x" + QString::number (mRenderContext .painter ()->device ()->height ()) );
514+ emit drawError ( ml );
515+ painter->end (); // drawError is not caught by anyone, so we end painting to notify caller
516+ return ;
517+ }
504518 mypFlattenedImage->fill ( 0 );
505519 QPainter * mypPainter = new QPainter ( mypFlattenedImage );
506520 if ( mySettings.value ( " /qgis/enable_anti_aliasing" , true ).toBool () )
0 commit comments