From fb88e3ca5c8905fbcaab79e96a2bfc1c36f72d08 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 1 Jun 2020 21:24:42 +0200 Subject: [PATCH] gdal_calc.py: raise exception in case of I/O error. Fixes https://github.com/qgis/QGIS/issues/36867 --- gdal/swig/python/scripts/gdal_calc.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/gdal/swig/python/scripts/gdal_calc.py b/gdal/swig/python/scripts/gdal_calc.py index 609ac499dacd..d052209237f0 100755 --- a/gdal/swig/python/scripts/gdal_calc.py +++ b/gdal/swig/python/scripts/gdal_calc.py @@ -327,6 +327,8 @@ def doit(opts, args): myval = gdalnumeric.BandReadAsArray(myFiles[i].GetRasterBand(myBandNo), xoff=myX, yoff=myY, win_xsize=nXValid, win_ysize=nYValid) + if myval is None: + raise Exception('Input block reading failed') # fill in nodata values if myNDV[i] is not None: @@ -355,7 +357,14 @@ def doit(opts, args): # write data block to the output file myOutB = myOut.GetRasterBand(bandNo) - gdalnumeric.BandWriteArray(myOutB, myResult, xoff=myX, yoff=myY) + if gdalnumeric.BandWriteArray(myOutB, myResult, xoff=myX, yoff=myY) != 0: + raise Exception('Block writing failed') + + gdal.ErrorReset() + myOut.FlushCache() + myOut = None + if gdal.GetLastErrorMsg() != '': + raise Exception('Dataset writing failed') if not opts.quiet: print("100 - Done")