# HG changeset patch # User Sebastien Jodogne # Date 1600704631 -7200 # Node ID afad57ac30efec5ab8c456e9feff873bed4b0e57 # Parent 7b14ddf795c5226b666955af5ffb0a4378402aff enforcing parameter "enforceAligned" in PamReader diff -r 7b14ddf795c5 -r afad57ac30ef OrthancFramework/Sources/DicomParsing/ParsedDicomFile.cpp --- a/OrthancFramework/Sources/DicomParsing/ParsedDicomFile.cpp Mon Sep 21 11:20:08 2020 +0200 +++ b/OrthancFramework/Sources/DicomParsing/ParsedDicomFile.cpp Mon Sep 21 18:10:31 2020 +0200 @@ -1257,7 +1257,9 @@ case MimeType_Pam: { - PamReader reader; + // "true" means "enforce memory alignment": This is slower, + // but possibly avoids crash related to non-aligned memory access + PamReader reader(true); reader.ReadFromMemory(content); EmbedImage(reader); break; diff -r 7b14ddf795c5 -r afad57ac30ef OrthancFramework/Sources/Images/PamReader.h --- a/OrthancFramework/Sources/Images/PamReader.h Mon Sep 21 11:20:08 2020 +0200 +++ b/OrthancFramework/Sources/Images/PamReader.h Mon Sep 21 18:10:31 2020 +0200 @@ -61,9 +61,11 @@ public: /** - See doc for field enforceAligned_ + See doc for field enforceAligned_. Setting "enforceAligned" is slower, + but avoids possible crashes due to non-aligned memory access. It is + recommended to set this parameter to "true". */ - PamReader(bool enforceAligned = false) : + explicit PamReader(bool enforceAligned) : enforceAligned_(enforceAligned), alignedImageBuffer_(NULL) { diff -r 7b14ddf795c5 -r afad57ac30ef OrthancFramework/UnitTestsSources/ImageTests.cpp --- a/OrthancFramework/UnitTestsSources/ImageTests.cpp Mon Sep 21 11:20:08 2020 +0200 +++ b/OrthancFramework/UnitTestsSources/ImageTests.cpp Mon Sep 21 18:10:31 2020 +0200 @@ -365,7 +365,7 @@ w.WriteToMemory(s, accessor); { - Orthanc::PamReader r; + Orthanc::PamReader r(true); r.ReadFromMemory(s); ASSERT_EQ(r.GetFormat(), Orthanc::PixelFormat_Grayscale16); @@ -411,7 +411,7 @@ Orthanc::TemporaryFile tmp; tmp.Write(s); - Orthanc::PamReader r2; + Orthanc::PamReader r2(true); r2.ReadFromFile(tmp.GetPath()); ASSERT_EQ(r2.GetFormat(), Orthanc::PixelFormat_Grayscale16);