From acd0a87609933d8ea00c38bb7d0e40415b8bd3d1 Mon Sep 17 00:00:00 2001
From: Julien Michel <julien.michel@orfeo-toolbox.org>
Date: Fri, 30 Jan 2015 17:12:12 +0100
Subject: [PATCH] COV: Fixing all coverity high impact issues in ossimPlugins

---
 .../ossim/ossimEnvisatAsarModel.cpp           |  3 +-
 .../ossim/ossimRadarSat2Model.cpp             | 25 +++++++--
 .../ossim/ossimRadarSat2ProductDoc.cpp        | 55 +++++++++----------
 .../ossim/ossimRadarSatModel.cpp              |  4 +-
 .../ossim/ossimSpot6DimapSupportData.cpp      |  2 +-
 .../ossim/ossimTerraSarModel.cpp              | 23 +++++++-
 .../ossim/ossimTerraSarProductDoc.cpp         |  1 +
 .../ossim/otb/GMSTDateTime.cpp                |  4 +-
 8 files changed, 76 insertions(+), 41 deletions(-)

diff --git a/Utilities/otbossimplugins/ossim/ossimEnvisatAsarModel.cpp b/Utilities/otbossimplugins/ossim/ossimEnvisatAsarModel.cpp
index 0abfa4d9cb..cc900312b3 100644
--- a/Utilities/otbossimplugins/ossim/ossimEnvisatAsarModel.cpp
+++ b/Utilities/otbossimplugins/ossim/ossimEnvisatAsarModel.cpp
@@ -68,7 +68,7 @@ namespace ossimplugins
    {
       const double CLUM        = 2.99792458e+8 ;
 
-      double GR, GR0, relativeGroundRange, slantRange, slantrangetime;
+      double GR, GR0, relativeGroundRange, slantRange;
 
       if (_n_srgr==0) return(-1) ;
 
@@ -83,7 +83,6 @@ namespace ossimplugins
          + coefset[4]*pow(relativeGroundRange,3)
          + coefset[5]*pow(relativeGroundRange,4);
 
-      slantrangetime = 2.0*slantRange / (CLUM);
       return  slantRange ;
    }
 
diff --git a/Utilities/otbossimplugins/ossim/ossimRadarSat2Model.cpp b/Utilities/otbossimplugins/ossim/ossimRadarSat2Model.cpp
index c7e78de798..7364f1bb03 100644
--- a/Utilities/otbossimplugins/ossim/ossimRadarSat2Model.cpp
+++ b/Utilities/otbossimplugins/ossim/ossimRadarSat2Model.cpp
@@ -460,7 +460,11 @@ bool ossimRadarSat2Model::InitPlatformPosition(const ossimKeywordlist &kwl, cons
       CivilDateTime eph_civil_date;
 
 
-      if (! ossim::iso8601TimeStringToCivilDate(utcString, eph_civil_date)) return false;
+      if (! ossim::iso8601TimeStringToCivilDate(utcString, eph_civil_date)) 
+        {
+        delete ephemeris;
+        return false;
+        }
 
       JSDDateTime eph_jsd_date(eph_civil_date);
 
@@ -514,7 +518,11 @@ bool ossimRadarSat2Model::InitRefPoint(const ossimKeywordlist &kwl,
    std::string zeroDopplerTimeFirstLine(zeroDopplerTimeFirstLine_str);
 
    CivilDateTime * date = new CivilDateTime() ;
-   if (! ossim::iso8601TimeStringToCivilDate(zeroDopplerTimeFirstLine, *date)) return false ;
+   if (! ossim::iso8601TimeStringToCivilDate(zeroDopplerTimeFirstLine, *date)) 
+     {
+     delete date;
+     return false ;
+     }
 
    if (_sensor->get_lin_direction() == -1) {
       double time = (double) date->get_second() + date->get_decimal() ;  // upper left corner
@@ -522,18 +530,22 @@ bool ossimRadarSat2Model::InitRefPoint(const ossimKeywordlist &kwl,
       date->set_second((int) floor(time)) ;
       date->set_decimal(time - floor(time)) ;
    }
-   delete date;//FIXME to confirm
   
    if(_platformPosition != 0)
    {
       Ephemeris * ephemeris = _platformPosition->Interpolate((JSDDateTime)*date);
-      if (ephemeris == 0) return false ;
+      if (ephemeris == 0) 
+        {
+        delete date;
+        return false ;
+        }
       _refPoint->set_ephemeris(ephemeris);
 
       delete ephemeris;
    }
    else
    {
+      delete date;
       return false;
    }
 
@@ -593,6 +605,8 @@ bool ossimRadarSat2Model::InitRefPoint(const ossimKeywordlist &kwl,
    // Default optimization
    optimizeModel(groundGcpCoordinates, imageGcpCoordinates) ;
 
+   delete date;
+
    return true;
 }
 
@@ -648,7 +662,7 @@ int ossimRadarSat2Model::FindSRGRSetNumber(JSDDateTime date) const
 {
    if (_n_srgr==0) return(-1) ;
 
-   double delays[20];
+   double * delays = new double[_n_srgr];
    for (int i=0;i<_n_srgr;i++)
    {
       delays[i] = fabs(date.get_second()+date.get_decimal()-_srgr_update[i]) ;
@@ -663,6 +677,7 @@ int ossimRadarSat2Model::FindSRGRSetNumber(JSDDateTime date) const
          min_delay = delays[i] ;
       }
    }
+   delete [] delays;
    return setNumber ;
 }
 
diff --git a/Utilities/otbossimplugins/ossim/ossimRadarSat2ProductDoc.cpp b/Utilities/otbossimplugins/ossim/ossimRadarSat2ProductDoc.cpp
index 65a03bea50..9dd620f54b 100644
--- a/Utilities/otbossimplugins/ossim/ossimRadarSat2ProductDoc.cpp
+++ b/Utilities/otbossimplugins/ossim/ossimRadarSat2ProductDoc.cpp
@@ -233,15 +233,13 @@ bool ossimRadarSat2ProductDoc::initPlatformPosition(
             }
             pos->setData(ephemeris, nbrData);
          }
-         else
-         {
-            for (int idx = 0; idx < nbrData; ++idx)
-            {
-               delete ephemeris[idx];
-            }
-            delete [] ephemeris;
-            ephemeris = 0;
-         }
+         
+         for (int idx = 0; idx < nbrData; ++idx)
+           {
+           delete ephemeris[idx];
+           }
+         delete [] ephemeris;
+         ephemeris = 0;
 
       } // matches: if ( xnodes.size() )
       else
@@ -830,27 +828,28 @@ RPCModel ossimRadarSat2ProductDoc::getRpcData(const ossimXmlDocument* xdoc) cons
       }
 
       // end character search term
-
-      model.biasError = biasError;
-      model.randomError = randomError;
-      model.lineFitQuality = lineFitQuality;
-      model.pixelFitQuality = pixelFitQuality;
-      model.lineOffset = lineOffset;
-      model.pixelOffset = pixelOffset;
-      model.latitudeOffset = latitudeOffset;
-      model.longitudeOffset = longitudeOffset;
-      model.heightOffset = heightOffset;
-      model.lineScale = lineScale;
-      model.pixelScale = pixelScale;
-      model.latitudeScale = latitudeScale;
-      model.longitudeScale = longitudeScale;
-      model.heightScale = heightScale;
-      model.lineNumeratorCoefficients = lineNumeratorCoefficients;
-      model.lineDenominatorCoefficients = lineDenominatorCoefficients;
-      model.pixelNumeratorCoefficients = pixelNumeratorCoefficients;
-      model.pixelDenominatorCoefficients = pixelDenominatorCoefficients;
    }
 
+   // Fill RPCModel members
+   model.biasError = biasError;
+   model.randomError = randomError;
+   model.lineFitQuality = lineFitQuality;
+   model.pixelFitQuality = pixelFitQuality;
+   model.lineOffset = lineOffset;
+   model.pixelOffset = pixelOffset;
+   model.latitudeOffset = latitudeOffset;
+   model.longitudeOffset = longitudeOffset;
+   model.heightOffset = heightOffset;
+   model.lineScale = lineScale;
+   model.pixelScale = pixelScale;
+   model.latitudeScale = latitudeScale;
+   model.longitudeScale = longitudeScale;
+   model.heightScale = heightScale;
+   model.lineNumeratorCoefficients = lineNumeratorCoefficients;
+   model.lineDenominatorCoefficients = lineDenominatorCoefficients;
+   model.pixelNumeratorCoefficients = pixelNumeratorCoefficients;
+   model.pixelDenominatorCoefficients = pixelDenominatorCoefficients;
+   
    return model;
 }
 
diff --git a/Utilities/otbossimplugins/ossim/ossimRadarSatModel.cpp b/Utilities/otbossimplugins/ossim/ossimRadarSatModel.cpp
index dd9e2deaa4..c78dd89ace 100644
--- a/Utilities/otbossimplugins/ossim/ossimRadarSatModel.cpp
+++ b/Utilities/otbossimplugins/ossim/ossimRadarSatModel.cpp
@@ -1211,7 +1211,7 @@ int ossimRadarSatModel::FindSRGRSetNumber(JSDDateTime date) const
 {
   if (_n_srgr==0) return(-1) ;
 
-  double delays[20];
+  double * delays = new double[_n_srgr];
   for (int i=0;i<_n_srgr;i++)
   {
     delays[i] = fabs(date.get_second()+date.get_decimal()-_srgr_update[i]) ;
@@ -1226,6 +1226,8 @@ int ossimRadarSatModel::FindSRGRSetNumber(JSDDateTime date) const
       min_delay = delays[i] ;
     }
   }
+
+  delete [] delays;
   return setNumber ;
 }
 }
diff --git a/Utilities/otbossimplugins/ossim/ossimSpot6DimapSupportData.cpp b/Utilities/otbossimplugins/ossim/ossimSpot6DimapSupportData.cpp
index d730421302..6fd95d9438 100644
--- a/Utilities/otbossimplugins/ossim/ossimSpot6DimapSupportData.cpp
+++ b/Utilities/otbossimplugins/ossim/ossimSpot6DimapSupportData.cpp
@@ -1342,7 +1342,7 @@ namespace ossimplugins
          }
 
          ossimString bandName = sub_nodes[0]->getText();
-         ossim_uint32 bandIndex;
+         ossim_uint32 bandIndex = 0;
          if (bandName == "B0")
             bandIndex = 0;
          else
diff --git a/Utilities/otbossimplugins/ossim/ossimTerraSarModel.cpp b/Utilities/otbossimplugins/ossim/ossimTerraSarModel.cpp
index cc4f3bfba0..6e9650effe 100644
--- a/Utilities/otbossimplugins/ossim/ossimTerraSarModel.cpp
+++ b/Utilities/otbossimplugins/ossim/ossimTerraSarModel.cpp
@@ -1129,7 +1129,11 @@ bool ossimplugins::ossimTerraSarModel::InitPlatformPosition(
        */
       std::string utcString(date_str);
       CivilDateTime eph_civil_date;
-      if (! ossim::iso8601TimeStringToCivilDate(utcString, eph_civil_date)) return false;
+      if (! ossim::iso8601TimeStringToCivilDate(utcString, eph_civil_date)) 
+        {
+        delete [] ephemeris;
+        return false;
+        }
 
       JSDDateTime eph_jsd_date(eph_civil_date);
 
@@ -1195,6 +1199,7 @@ bool ossimplugins::ossimTerraSarModel::InitRefPoint(const ossimKeywordlist &kwl,
    }
    else
    {
+      delete date;
       return false;
    }
 
@@ -1227,14 +1232,26 @@ bool ossimplugins::ossimTerraSarModel::InitRefPoint(const ossimKeywordlist &kwl,
       std::string azimuthStartTime(kwl.find("azimuthStartTime"));
       std::string azimuthStopTime(kwl.find("azimuthStopTime"));
       CivilDateTime * dateStart = new CivilDateTime() ;
-      if (! ossim::iso8601TimeStringToCivilDate(azimuthStartTime, *dateStart)) return false ;
+      if (! ossim::iso8601TimeStringToCivilDate(azimuthStartTime, *dateStart)) 
+        {
+        delete dateStart;
+        return false ;
+        }
       CivilDateTime * dateStop = new CivilDateTime() ;
-      if (! ossim::iso8601TimeStringToCivilDate(azimuthStopTime, *dateStop)) return false ;
+      if (! ossim::iso8601TimeStringToCivilDate(azimuthStopTime, *dateStop)) 
+        {
+        delete dateStart;
+        delete dateStop;
+        return false ;
+        }
       double acq_msec_first = (double) dateStart->get_second()+dateStart->get_decimal();
       double acq_msec_last = (double) dateStop->get_second()+dateStop->get_decimal();
 
       double actualPRF = theImageSize.y/(acq_msec_last-acq_msec_first) ;
       _sensor->set_nAzimuthLook(_sensor->get_prf()/actualPRF); 
+
+      delete dateStart;
+      delete dateStop;
    }
    else   
       _sensor->set_nAzimuthLook(1.0);
diff --git a/Utilities/otbossimplugins/ossim/ossimTerraSarProductDoc.cpp b/Utilities/otbossimplugins/ossim/ossimTerraSarProductDoc.cpp
index 7f1ef5b1e7..6bf296aae2 100644
--- a/Utilities/otbossimplugins/ossim/ossimTerraSarProductDoc.cpp
+++ b/Utilities/otbossimplugins/ossim/ossimTerraSarProductDoc.cpp
@@ -243,6 +243,7 @@ bool ossimplugins::ossimTerraSarProductDoc::initPlatformPosition(
                   << " DEBUG\nnbrData:  " << nbrData << "\n";
             } 
             pos->setData(ephemeris, nbrData);
+            delete [] ephemeris;
          }
          else
          {
diff --git a/Utilities/otbossimplugins/ossim/otb/GMSTDateTime.cpp b/Utilities/otbossimplugins/ossim/otb/GMSTDateTime.cpp
index a67b1707e2..263f972395 100644
--- a/Utilities/otbossimplugins/ossim/otb/GMSTDateTime.cpp
+++ b/Utilities/otbossimplugins/ossim/otb/GMSTDateTime.cpp
@@ -17,7 +17,9 @@ namespace ossimplugins
 
 
 GMSTDateTime::GMSTDateTime():
-  _tms(0)
+  _tms(0),
+  // TODO: Check this initialisation
+  _origine(GMSTDateTime::AN1900)
 {
 }
 
-- 
GitLab