Ticket #1769: gdal_svn_trunk_1769.patch
| File gdal_svn_trunk_1769.patch, 2.1 kB (added by rouault, 8 months ago) |
|---|
-
frmts/png/pngdataset.cpp
old new 451 451 452 452 hPNG = png_create_read_struct( PNG_LIBPNG_VER_STRING, this, NULL, NULL ); 453 453 454 png_set_error_fn( hPNG, this, png_gdal_error, png_gdal_warning );454 png_set_error_fn( hPNG, &sSetJmpContext, png_gdal_error, png_gdal_warning ); 455 455 if( setjmp( sSetJmpContext ) != 0 ) 456 456 return; 457 457 … … 704 704 /* -------------------------------------------------------------------- */ 705 705 /* Setup error handling. */ 706 706 /* -------------------------------------------------------------------- */ 707 png_set_error_fn( poDS->hPNG, poDS, png_gdal_error, png_gdal_warning );707 png_set_error_fn( poDS->hPNG, &poDS->sSetJmpContext, png_gdal_error, png_gdal_warning ); 708 708 709 709 if( setjmp( poDS->sSetJmpContext ) != 0 ) 710 710 return NULL; … … 972 972 png_structp hPNG; 973 973 png_infop psPNGInfo; 974 974 975 jmp_buf sSetJmpContext; 975 976 hPNG = png_create_write_struct( PNG_LIBPNG_VER_STRING, 976 NULL, NULL, NULL);977 &sSetJmpContext, png_gdal_error, png_gdal_warning ); 977 978 psPNGInfo = png_create_info_struct( hPNG ); 978 979 980 if( setjmp( sSetJmpContext ) != 0 ) 981 { 982 VSIFCloseL( fpImage ); 983 png_destroy_write_struct( &hPNG, &psPNGInfo ); 984 return NULL; 985 } 986 979 987 png_set_write_fn( hPNG, fpImage, png_vsi_write_data, png_vsi_flush ); 980 988 981 989 png_set_IHDR( hPNG, psPNGInfo, nXSize, nYSize, … … 1240 1248 // libpng is generally not built as C++ and so won't honour unwind 1241 1249 // semantics. Ugg. 1242 1250 1243 PNGDataset *poDS = (PNGDataset *) png_ptr->error_ptr; 1244 1245 longjmp( poDS->sSetJmpContext, 1 ); 1251 jmp_buf* psSetJmpContext = (jmp_buf*) png_ptr->error_ptr; 1252 if (psSetJmpContext) 1253 { 1254 longjmp( *psSetJmpContext, 1 ); 1255 } 1246 1256 } 1247 1257 1248 1258 /************************************************************************/
