Mercurial > hg > orthanc
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 */); }