@@ -1420,6 +1420,12 @@ void QgsRasterLayer::draw (QPainter * theQPainter,
14201420void QgsRasterLayer::drawSingleBandGray (QPainter * theQPainter, QgsRasterViewPort * theRasterViewPort, QgsMapToPixel * theQgsMapToPixel, int theBandNo)
14211421{
14221422 QgsDebugMsg (" QgsRasterLayer::drawSingleBandGray called for layer " + QString::number (theBandNo));
1423+ // Invalid band number, segfault prevention
1424+ if (0 >= theBandNo)
1425+ {
1426+ return ;
1427+ }
1428+
14231429 GDALRasterBand *myGdalBand = mGdalDataset ->GetRasterBand (theBandNo);
14241430 GDALDataType myDataType = myGdalBand->GetRasterDataType ();
14251431 void *myGdalScanData = readData ( myGdalBand, theRasterViewPort );
@@ -1514,12 +1520,17 @@ void QgsRasterLayer::drawSingleBandGray(QPainter * theQPainter, QgsRasterViewPor
15141520void QgsRasterLayer::drawSingleBandPseudoColor (QPainter * theQPainter,
15151521 QgsRasterViewPort * theRasterViewPort,
15161522 QgsMapToPixel * theQgsMapToPixel,
1517- int theBandNoInt )
1523+ int theBandNo )
15181524{
15191525 QgsDebugMsg (" QgsRasterLayer::drawSingleBandPseudoColor called" );
1520-
1521- QgsRasterBandStats myRasterBandStats = getRasterBandStats (theBandNoInt);
1522- GDALRasterBand *myGdalBand = mGdalDataset ->GetRasterBand (theBandNoInt);
1526+ // Invalid band number, segfault prevention
1527+ if (0 >= theBandNo)
1528+ {
1529+ return ;
1530+ }
1531+
1532+ QgsRasterBandStats myRasterBandStats = getRasterBandStats (theBandNo);
1533+ GDALRasterBand *myGdalBand = mGdalDataset ->GetRasterBand (theBandNo);
15231534 GDALDataType myDataType = myGdalBand->GetRasterDataType ();
15241535 void *myGdalScanData = readData ( myGdalBand, theRasterViewPort );
15251536
@@ -1616,7 +1627,12 @@ void QgsRasterLayer::drawPalettedSingleBandColor(QPainter * theQPainter, QgsRast
16161627 QgsMapToPixel * theQgsMapToPixel, int theBandNo)
16171628{
16181629 QgsDebugMsg (" QgsRasterLayer::drawPalettedSingleBandColor called" );
1619-
1630+ // Invalid band number, segfault prevention
1631+ if (0 >= theBandNo)
1632+ {
1633+ return ;
1634+ }
1635+
16201636 GDALRasterBand *myGdalBand = mGdalDataset ->GetRasterBand (theBandNo);
16211637 GDALDataType myDataType = myGdalBand->GetRasterDataType ();
16221638 void *myGdalScanData = readData ( myGdalBand, theRasterViewPort );
@@ -1696,7 +1712,12 @@ void QgsRasterLayer::drawPalettedSingleBandGray(QPainter * theQPainter, QgsRaste
16961712 QString const & theColorQString)
16971713{
16981714 QgsDebugMsg (" QgsRasterLayer::drawPalettedSingleBandGray called" );
1699-
1715+ // Invalid band number, segfault prevention
1716+ if (0 >= theBandNo)
1717+ {
1718+ return ;
1719+ }
1720+
17001721 QgsRasterBandStats myRasterBandStats = getRasterBandStats (theBandNo);
17011722 GDALRasterBand *myGdalBand = mGdalDataset ->GetRasterBand (theBandNo);
17021723 GDALDataType myDataType = myGdalBand->GetRasterDataType ();
@@ -1790,6 +1811,12 @@ void QgsRasterLayer::drawPalettedSingleBandPseudoColor(QPainter * theQPainter, Q
17901811 QString const & theColorQString)
17911812{
17921813 QgsDebugMsg (" QgsRasterLayer::drawPalettedSingleBandPseudoColor called" );
1814+ // Invalid band number, segfault prevention
1815+ if (0 >= theBandNo)
1816+ {
1817+ return ;
1818+ }
1819+
17931820 QgsRasterBandStats myRasterBandStats = getRasterBandStats (theBandNo);
17941821 GDALRasterBand *myGdalBand = mGdalDataset ->GetRasterBand (theBandNo);
17951822 GDALDataType myDataType = myGdalBand->GetRasterDataType ();
@@ -1913,7 +1940,12 @@ void QgsRasterLayer::drawPalettedMultiBandColor(QPainter * theQPainter, QgsRaste
19131940 QgsMapToPixel * theQgsMapToPixel, int theBandNo)
19141941{
19151942 QgsDebugMsg (" QgsRasterLayer::drawPalettedMultiBandColor called" );
1916-
1943+ // Invalid band number, segfault prevention
1944+ if (0 >= theBandNo)
1945+ {
1946+ return ;
1947+ }
1948+
19171949 GDALRasterBand *myGdalBand = mGdalDataset ->GetRasterBand (theBandNo);
19181950 GDALDataType myDataType = myGdalBand->GetRasterDataType ();
19191951 void *myGdalScanData = readData ( myGdalBand, theRasterViewPort );
@@ -2031,10 +2063,26 @@ void QgsRasterLayer::drawMultiBandColor(QPainter * theQPainter, QgsRasterViewPor
20312063 QgsMapToPixel * theQgsMapToPixel)
20322064{
20332065 QgsDebugMsg (" QgsRasterLayer::drawMultiBandColor called" );
2034-
20352066 int myRedBandNo = getRasterBandNumber (mRedBandName );
2067+ // Invalid band number, segfault prevention
2068+ if (0 >= myRedBandNo)
2069+ {
2070+ return ;
2071+ }
2072+
20362073 int myGreenBandNo = getRasterBandNumber (mGreenBandName );
2074+ // Invalid band number, segfault prevention
2075+ if (0 >= myGreenBandNo)
2076+ {
2077+ return ;
2078+ }
2079+
20372080 int myBlueBandNo = getRasterBandNumber (mBlueBandName );
2081+ // Invalid band number, segfault prevention
2082+ if (0 >= myBlueBandNo)
2083+ {
2084+ return ;
2085+ }
20382086 GDALRasterBand *myGdalRedBand = mGdalDataset ->GetRasterBand (myRedBandNo);
20392087 GDALRasterBand *myGdalGreenBand = mGdalDataset ->GetRasterBand (myGreenBandNo);
20402088 GDALRasterBand *myGdalBlueBand = mGdalDataset ->GetRasterBand (myBlueBandNo);
@@ -2396,7 +2444,9 @@ const QgsRasterBandStats QgsRasterLayer::getRasterBandStats(int theBandNo)
23962444 }
23972445 else if (rasterLayerType==GRAY_OR_UNDEFINED)
23982446 {
2399- myRasterBandStats.bandName = myColorerpretation;
2447+ // PJE 2008-01-14 This function should not be changing the band name,
2448+ // The format below is not the same as the constructor
2449+ // myRasterBandStats.bandName = myColorerpretation;
24002450 }
24012451 else // rasterLayerType is MULTIBAND
24022452 {
0 commit comments