Windows Dr.Memory and OpenEXR

Gonzalo Garramuño <[email protected]> Sun, 26 Feb 2017 18:38:01 -0300
Newsgroups gmane.comp.video.openexr.devel
Message-ID <[email protected]>
I am trying to debug my program (or any openexr demo program like 
exrstdattr) under Windows Dr.Memory (a multiplatform memory tool like 
valgrind), and when the code executes it raises the following exceptions 
before crashing:

Dr. Memory version 1.11.0 build 2 built on Aug 29 2016 02:41:18
Dr. Memory results for pid 4544: "exrstdattr.exe"
Application cmdline: "exrstdattr.exe 
d:/movies/openexr-images/ScanLines/StillLife.exr test.exr"
Recorded 115 suppression(s) from default c:\Program Files (x86)\Dr. 
Memory\bin64\suppress-default.txt

Error #1: UNADDRESSABLE ACCESS beyond heap bounds: reading 
0x0000008835a0d098-0x0000008835a0d0a0 8 byte(s)
# 0 std::_String_val<>::_Myptr [c:\program files (x86)\microsoft visual 
studio 14.0\vc\include\xstring:521]
# 1 std::_String_alloc<>::_Myptr [c:\program files (x86)\microsoft 
visual studio 14.0\vc\include\xstring:583]
# 2 std::basic_string<>::compare [c:\program files (x86)\microsoft 
visual studio 14.0\vc\include\xstring:2121]
# 3 std::operator==<> [c:\program files (x86)\microsoft visual studio 
14.0\vc\include\xstring:2460]
# 4 main 
[d:\code\applications\mrviewer\dependencies\openexr\exrstdattr\main.cpp:871]
Note: @0:00:03.157 in thread 4600
Note: refers to 0 byte(s) beyond last valid byte in prior malloc
Note: prev lower malloc: 0x0000008835a0d070-0x0000008835a0d098
Note: allocated here:
Note: # 0 replace_malloc [d:\drmemory_package\common\alloc_replace.c:2576]
Note: # 1 IlmImf-2_2.dll!Imf_2_2::CpuId::CpuId +0x634    
(0x00007ffa2275c7f5 <IlmImf-2_2.dll+0x8c7f5>)
Note: # 2 IlmImf-2_2.dll!Imf_2_2::Slice::`default constructor 
closure'     +0x12b0   (0x00007ffa226d7db1 <IlmImf-2_2.dll+0x7db1>)
Note: # 3 IlmImf-2_2.dll!Imf_2_2::TypedAttribute<>::writeValueTo 
+0x610    (0x00007ffa226d5281 <IlmImf-2_2.dll+0x5281>)
Note: # 4 IlmImf-2_2.dll!Imf_2_2::Header::insert +0x1ea    
(0x00007ffa226e316b <IlmImf-2_2.dll+0x1316b>)
Note: # 5 IlmImf-2_2.dll!Imf_2_2::Slice::`default constructor 
closure'     +0x6ea    (0x00007ffa226d71eb <IlmImf-2_2.dll+0x71eb>)
Note: # 6 IlmImf-2_2.dll!Imf_2_2::CpuId::CpuId +0x634    
(0x00007ffa2275c7f5 <IlmImf-2_2.dll+0x8c7f5>)
Note: # 7 IlmImf-2_2.dll!Imf_2_2::PreviewRgba::`default constructor 
closure'+0x67b    (0x00007ffa226e0d2c <IlmImf-2_2.dll+0x10d2c>)
Note: # 8 IlmImf-2_2.dll!Imf_2_2::FrameBuffer::insert +0x8ca    
(0x00007ffa226de88b <IlmImf-2_2.dll+0xe88b>)
Note: # 9 IlmImf-2_2.dll!Imf_2_2::FrameBuffer::insert +0x36a    
(0x00007ffa226de32b <IlmImf-2_2.dll+0xe32b>)
Note: #10 IlmImf-2_2.dll!Imf_2_2::Slice::`default constructor 
closure'     +0x1340   (0x00007ffa226d7e41 <IlmImf-2_2.dll+0x7e41>)
Note: #11 IlmImf-2_2.dll!Imf_2_2::FrameBuffer::insert +0xdc5    
(0x00007ffa226ded86 <IlmImf-2_2.dll+0xed86>)
Note: instruction: cmp    0x20(%rax) $0x0000000000000010

Error #2: UNADDRESSABLE ACCESS: reading 
0x0000006567616d69-0x0000006567616d6a 1 byte(s)
# 0 replace_memcmp [d:\drmemory_package\drmemory\replace.c:817]
# 1 std::char_traits<>::compare [c:\program files (x86)\microsoft visual 
studio 14.0\vc\include\iosfwd:517]
# 2 std::basic_string<>::_Traits_compare [c:\program files 
(x86)\microsoft visual studio 14.0\vc\include\xstring:2096]
# 3 std::basic_string<>::compare [c:\program files (x86)\microsoft 
visual studio 14.0\vc\include\xstring:2121]
# 4 std::operator==<> [c:\program files (x86)\microsoft visual studio 
14.0\vc\include\xstring:2460]
# 5 main 
[d:\code\applications\mrviewer\dependencies\openexr\exrstdattr\main.cpp:871]
Note: @0:00:03.204 in thread 4600
Note: instruction: movzx  (%rax) -> %eax

I am wondering if all is fine and whether Dr.Memory is getting confused 
and what can be done to work around the confusion.


-- 
Gonzalo Garramuño