Mercurial > hg > orthanc
comparison Core/DicomParsing/FromDcmtkBridge.cpp @ 3771:74889e6f6d68
fix memory issues if parsing invalid DICOM file
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 17 Mar 2020 19:19:48 +0100 |
parents | eb044cc49d51 |
children | a11d1d4b5849 |
comparison
equal
deleted
inserted
replaced
3769:eb044cc49d51 | 3771:74889e6f6d68 |
---|---|
1877 is.setEos(); | 1877 is.setEos(); |
1878 | 1878 |
1879 std::unique_ptr<DcmFileFormat> result(new DcmFileFormat); | 1879 std::unique_ptr<DcmFileFormat> result(new DcmFileFormat); |
1880 | 1880 |
1881 result->transferInit(); | 1881 result->transferInit(); |
1882 if (!result->read(is).good()) | 1882 |
1883 /** | |
1884 * New in Orthanc 1.6.0: The "size" is given as an argument to the | |
1885 * "read()" method. This can avoid huge memory consumption if | |
1886 * parsing an invalid DICOM file, which can notably been observed | |
1887 * by executing the integration test "test_upload_compressed" on | |
1888 * valgrind running Orthanc. | |
1889 **/ | |
1890 if (!result->read(is, EXS_Unknown, EGL_noChange, size).good()) | |
1883 { | 1891 { |
1884 throw OrthancException(ErrorCode_BadFileFormat, | 1892 throw OrthancException(ErrorCode_BadFileFormat, |
1885 "Cannot parse an invalid DICOM file (size: " + | 1893 "Cannot parse an invalid DICOM file (size: " + |
1886 boost::lexical_cast<std::string>(size) + " bytes)"); | 1894 boost::lexical_cast<std::string>(size) + " bytes)"); |
1887 } | 1895 } |