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 }