diff --git a/autotest/gcore/data/gtiff/lzw_corrupted.tif b/autotest/gcore/data/gtiff/lzw_corrupted.tif new file mode 100644 index 000000000000..444fc94f5122 Binary files /dev/null and b/autotest/gcore/data/gtiff/lzw_corrupted.tif differ diff --git a/autotest/gcore/libertiff.py b/autotest/gcore/libertiff.py index 6d8b535dfcd0..0efbf2b97358 100755 --- a/autotest/gcore/libertiff.py +++ b/autotest/gcore/libertiff.py @@ -859,3 +859,10 @@ def test_libertiff_read_geomatrix(): def test_libertiff_num_threads_saturated(): libertiff_open("data/byte.tif", open_options=["NUM_THREADS=10000"]) + + +def test_libertiff_corrupted_lzw(): + + ds = libertiff_open("data/gtiff/lzw_corrupted.tif") + with pytest.raises(Exception): + ds.ReadRaster() diff --git a/autotest/gcore/tiff_read.py b/autotest/gcore/tiff_read.py index 500d05398930..763c75c1af8c 100755 --- a/autotest/gcore/tiff_read.py +++ b/autotest/gcore/tiff_read.py @@ -5575,3 +5575,10 @@ def test_tiff_read_corrupted_vat_dbf(tmp_vsimem): band = ds.GetRasterBand(1) with pytest.raises(Exception): band.GetDefaultRAT() + + +def test_tiff_read_corrupted_lzw(): + + ds = gdal.Open("data/gtiff/lzw_corrupted.tif") + with pytest.raises(Exception): + ds.ReadRaster() diff --git a/frmts/libertiff/libertiffdataset.cpp b/frmts/libertiff/libertiffdataset.cpp index 5b496081fac8..6e88b572423b 100644 --- a/frmts/libertiff/libertiffdataset.cpp +++ b/frmts/libertiff/libertiffdataset.cpp @@ -1403,6 +1403,8 @@ bool LIBERTIFFDataset::ReadBlock(GByte *pabyBlockData, int nBlockXOff, if (tlsState.m_tiff.tif_decodestrip) { + tlsState.m_tiff.tif_name = + const_cast(GetDescription()); tlsState.m_tiff.tif_dir.td_sampleformat = static_cast(m_image->sampleFormat()); tlsState.m_tiff.tif_dir.td_bitspersample =