Changeset 13371

Show
Ignore:
Timestamp:
12/18/07 17:16:49 (5 months ago)
Author:
mloskot
Message:

Added poor man test of PNG driver clean recovery from broken file errors (Ticket #1769).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/autotest/gdrivers/png.py

    r12180 r13371  
    142142    return 'success' 
    143143 
     144############################################################################### 
     145# Test PNG file with broken IDAT chunk. This poor man test of clean 
     146# recovery from errors caused by reading broken file.. 
     147 
     148def png_8(): 
     149 
     150    drv = gdal.GetDriverByName( 'PNG' ) 
     151    ds_src = gdal.Open( 'data/idat_broken.png' ) 
     152 
     153    md = ds_src.GetMetadata() 
     154    if len(md) > 0: 
     155        gdaltest.post_reason('metadata list not expected') 
     156        return 'fail' 
     157 
     158    # Number of bands has been preserved 
     159    if ds_src.RasterCount != 4: 
     160        gdaltest.post_reason('wrong number of bands') 
     161        return 'fail' 
     162 
     163    # No reading is performed, so we expect valid reference 
     164    b = ds_src.GetRasterBand(1) 
     165    if b is None: 
     166        gdaltest.post_reason('band 1 is missing') 
     167        return 'fail' 
     168 
     169    # We're not interested in returned value but internal state of GDAL. 
     170    gdal.PushErrorHandler( 'CPLQuietErrorHandler' ) 
     171    stats = b.ComputeBandStats() 
     172    err = gdal.GetLastErrorNo() 
     173    gdal.PopErrorHandler() 
     174 
     175    if err == 0: 
     176        gdaltest.post_reason('error condition expected') 
     177        return 'fail' 
     178 
     179    gdal.PushErrorHandler( 'CPLQuietErrorHandler' ) 
     180    ds_dst = drv.CreateCopy( 'tmp/idat_broken.png', ds_src ) 
     181    err = gdal.GetLastErrorNo() 
     182    gdal.PopErrorHandler() 
     183    ds_src = None 
     184 
     185    if err == 0: 
     186        gdaltest.post_reason('error condition expected') 
     187        return 'fail' 
     188 
     189    if ds_dst is not None: 
     190        gdaltest.post_reason('dataset not expected') 
     191        return 'fail' 
     192 
     193    os.remove( 'tmp/idat_broken.png' ) 
     194 
     195    return 'success' 
     196 
     197 
    144198 
    145199gdaltest_list = [ 
     
    150204    png_5, 
    151205    png_6, 
    152     png_7 ] 
     206    png_7, 
     207    png_8 ] 
    153208 
    154209if __name__ == '__main__':