]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
Protection against agressive users
authorAnthony Geay <anthony.geay@edf.fr>
Fri, 17 Feb 2017 15:50:30 +0000 (16:50 +0100)
committerAnthony Geay <anthony.geay@edf.fr>
Fri, 17 Feb 2017 15:50:30 +0000 (16:50 +0100)
src/MEDLoader/MEDFileBlowStrEltUp.cxx
src/MEDLoader/MEDFileBlowStrEltUp.hxx

index 973f2b8ed447ba67aa250f4cf8c9f9ead8c0c1c9..9e6ee4f45ce6b4cd0d7eb7c6993ac4d3a22f98bd 100644 (file)
@@ -803,6 +803,23 @@ void LocSpliter::newPerMeshPerTypePerDisc(const MEDFileFieldPerMeshPerTypePerDis
   _fw->newPerMeshPerTypePerDisc(pmptpd);
 }
 
+void MEDFileBlowStrEltUp::DealWithConflictNames(MEDFileAnyTypeFieldMultiTS *fmtsToAdd, const MEDFileFields *fs)
+{
+  std::vector<std::string> fnames(fs->getFieldsNames());
+  for(int i=0;i<1000;i++)
+    {
+      std::ostringstream oss; oss << fmtsToAdd->getName();
+      if(i>=1)
+        oss << "_" << i-1;
+      if(std::find(fnames.begin(),fnames.end(),oss.str())==fnames.end())
+        {
+          fmtsToAdd->setName(oss.str());
+          return ;
+        }
+    }
+  throw INTERP_KERNEL::Exception("DealWithConflictNames : Eh eh interesting !");
+}
+
 MCAuto<MEDFileFields> MEDFileBlowStrEltUp::splitFieldsPerLoc(const MEDFileFields *fields, const MEDFileUMesh *mesh, MEDFileMeshes *msOut, MEDFileFields *allZeOutFields)
 {
   LocSpliter ls(fields);
@@ -815,6 +832,7 @@ MCAuto<MEDFileFields> MEDFileBlowStrEltUp::splitFieldsPerLoc(const MEDFileFields
       for(int j=0;j<(*it)->getNumberOfFields();j++)
         {
           MCAuto<MEDFileAnyTypeFieldMultiTS> fmts((*it)->getFieldAtPos(j));
+          DealWithConflictNames(fmts,allZeOutFields);
           allZeOutFields->pushField(fmts);
         }
     }
index 1363548de3443fb74a81b232e272c5a7870d737b..487583920f09b4c2fb69a247a7ce2dc973884b66 100644 (file)
@@ -45,6 +45,7 @@ namespace MEDCoupling
     void dealWithMEDBALLSInFields(const MEDFileFields *fs, const MEDFileEltStruct4Mesh *zeStr, const MEDFileFields *varAtt, MEDFileFields *zeOutputs) const;
     static std::string BuildNewMeshName(const std::string& meshName, const std::string& seName);
     static std::string BuildVarAttName(std::size_t iPart, std::size_t totINbParts, std::size_t jPart, std::size_t totJNbParts, const std::string& name);
+    static void DealWithConflictNames(MEDFileAnyTypeFieldMultiTS *fmtsToAdd, const MEDFileFields *fs);
   public:
     static const char MED_BALL_STR[];
   private: