diff Core/DicomParsing/ParsedDicomFile.cpp @ 3276:9b0e67161600

More tolerance wrt. invalid DICOM files that must be returned by Orthanc C-FIND SCP
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 21 Feb 2019 10:21:12 +0100
parents cf8cbeb35f33
children 63f59ad9381a
line wrap: on
line diff
--- a/Core/DicomParsing/ParsedDicomFile.cpp	Wed Feb 20 17:21:39 2019 +0100
+++ b/Core/DicomParsing/ParsedDicomFile.cpp	Thu Feb 21 10:21:12 2019 +0100
@@ -956,7 +956,8 @@
 
 
   void ParsedDicomFile::CreateFromDicomMap(const DicomMap& source,
-                                           Encoding defaultEncoding)
+                                           Encoding defaultEncoding,
+                                           bool permissive)
   {
     pimpl_->file_.reset(new DcmFileFormat);
 
@@ -998,24 +999,35 @@
       if (it->first != DICOM_TAG_SPECIFIC_CHARACTER_SET &&
           !it->second->IsNull())
       {
-        ReplacePlainString(it->first, it->second->GetContent());
+        try
+        {
+          ReplacePlainString(it->first, it->second->GetContent());
+        }
+        catch (OrthancException&)
+        {
+          if (!permissive)
+          {
+            throw;
+          }
+        }
       }
     }
   }
 
 
   ParsedDicomFile::ParsedDicomFile(const DicomMap& map,
-                                   Encoding defaultEncoding) :
+                                   Encoding defaultEncoding,
+                                   bool permissive) :
     pimpl_(new PImpl)
   {
-    CreateFromDicomMap(map, defaultEncoding);
+    CreateFromDicomMap(map, defaultEncoding, permissive);
   }
 
 
   ParsedDicomFile::ParsedDicomFile(const DicomMap& map) : 
     pimpl_(new PImpl)
   {
-    CreateFromDicomMap(map, GetDefaultDicomEncoding());
+    CreateFromDicomMap(map, GetDefaultDicomEncoding(), false /* be strict by default */);
   }