From b51f137e7da75fbd218f16a76cefa16e0ff4e393 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 23 Sep 2024 00:57:25 +0200 Subject: [PATCH] Fix Coverity Scan issues (master only) --- frmts/hdf5/s102dataset.cpp | 9 ++++---- gcore/gdaldataset.cpp | 2 ++ gcore/gdalthreadsafedataset.cpp | 4 ++++ .../parquet/ogrparquetwriterlayer.cpp | 21 ++++++++++--------- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/frmts/hdf5/s102dataset.cpp b/frmts/hdf5/s102dataset.cpp index 563ca20ce1f2..428ec45cc894 100644 --- a/frmts/hdf5/s102dataset.cpp +++ b/frmts/hdf5/s102dataset.cpp @@ -514,11 +514,10 @@ bool S102Dataset::OpenQuality(GDALOpenInfo *poOpenInfo, // I believe this is non-conformant. // Escape potentials single-quote and double-quote with back-slash - const auto osEscapedCompName = - CPLString(oType.GetComponents()[0]->GetName()) - .replaceAll("\\", "\\\\") - .replaceAll("'", "\\'") - .replaceAll("\"", "\\\""); + CPLString osEscapedCompName(oType.GetComponents()[0]->GetName()); + osEscapedCompName.replaceAll("\\", "\\\\") + .replaceAll("'", "\\'") + .replaceAll("\"", "\\\""); // Gets a view with that single component extracted. poValuesArray = poValuesArray->GetView( diff --git a/gcore/gdaldataset.cpp b/gcore/gdaldataset.cpp index 2f17d2d69757..cc5289d644f5 100644 --- a/gcore/gdaldataset.cpp +++ b/gcore/gdaldataset.cpp @@ -376,11 +376,13 @@ GDALDataset::~GDALDataset() if (m_poPrivate->hMutex != nullptr) CPLDestroyMutex(m_poPrivate->hMutex); + // coverity[missing_lock] CPLFree(m_poPrivate->m_pszWKTCached); if (m_poPrivate->m_poSRSCached) { m_poPrivate->m_poSRSCached->Release(); } + // coverity[missing_lock] CPLFree(m_poPrivate->m_pszWKTGCPCached); if (m_poPrivate->m_poSRSGCPCached) { diff --git a/gcore/gdalthreadsafedataset.cpp b/gcore/gdalthreadsafedataset.cpp index 2ce0de26d31c..3021768ff48c 100644 --- a/gcore/gdalthreadsafedataset.cpp +++ b/gcore/gdalthreadsafedataset.cpp @@ -476,7 +476,10 @@ GDALThreadLocalDatasetCache::~GDALThreadLocalDatasetCache() { // Leak datasets when GDAL has been de-initialized if (!m_poCache->empty()) + { + // coverity[leaked_storage] CPL_IGNORE_RET_VAL(m_poCache.release()); + } return; } @@ -747,6 +750,7 @@ GDALDataset *GDALThreadSafeDataset::RefUnderlyingDataset() const // "Clone" the prototype dataset, which in 99% of the cases, involves // doing a GDALDataset::Open() call to re-open it. Do that by temporarily // dropping the lock that protects poCache->m_oCache. + // coverity[uninit_use_in_call] oLock.unlock(); poTLSDS = m_poPrototypeDS->Clone(GDAL_OF_RASTER, /* bCanShareState=*/true); if (poTLSDS) diff --git a/ogr/ogrsf_frmts/parquet/ogrparquetwriterlayer.cpp b/ogr/ogrsf_frmts/parquet/ogrparquetwriterlayer.cpp index f72610e96dc8..b6a1cf493480 100644 --- a/ogr/ogrsf_frmts/parquet/ogrparquetwriterlayer.cpp +++ b/ogr/ogrsf_frmts/parquet/ogrparquetwriterlayer.cpp @@ -1291,17 +1291,18 @@ bool OGRParquetWriterLayer::IsArrowSchemaSupported( osErrorMsg = "BinaryView not supported"; return false; } - if (schema->format[0] == '+' && schema->format[1] == 'v' && - schema->format[1] == 'l') + if (schema->format[0] == '+' && schema->format[1] == 'v') { - osErrorMsg = "ListView not supported"; - return false; - } - if (schema->format[0] == '+' && schema->format[1] == 'v' && - schema->format[1] == 'L') - { - osErrorMsg = "LargeListView not supported"; - return false; + if (schema->format[2] == 'l') + { + osErrorMsg = "ListView not supported"; + return false; + } + else if (schema->format[2] == 'L') + { + osErrorMsg = "LargeListView not supported"; + return false; + } } for (int64_t i = 0; i < schema->n_children; ++i) {