Yes, there might be something wrong in my locales, `str` could not be read
( "error reading characters of string" , in my previous post) and
`filename` was undefined.
However, that's not necessarily the problem, the memory is allocated and I
have the same size as in debug (79 characters).
Before ImageInput::open, I print filename to stdout, and I see a correct
result.
cout << "reading (float) file: " << filename;
auto in = ImageInput::open(filename);
The right way to be able to read filename is to make a local copy; also I
make certain that I got the correct type (string), even though string has a
default constructor from const char.
cout << "reading (float) file: " << filename;
string filename2 = filename;
auto in = ImageInput::open(filename2);
It might be related to the character set, but I don't think since it did
not change from debug to release.
https://stackoverflow.com/questions/9349342/about-the-character-set-option-in-visual-studio
In order to acertain this, I did set the character set to "not set" and
tried also "unicode", but I stil got the same memory error.
Here the compile command with "not set" ( /D "_UNICODE" /D "UNICODE" are
removed):
/permissive- /Yu"pch.h" /GS /GL /W3 /Gy /Zc:wchar_t /I"c:\lib\tiff\include"
/I"c:\lib\openexr\include" /I"c:\lib\oiio\include" /Zi /Gm- /O2 /sdl
/Fd"x64\Release\vc142.pdb" /Zc:inline /fp:precise /D "NDEBUG" /D "_CONSOLE"
/errorReport:prompt /WX- /Zc:forScope /Gd /Oi /MD /std:c++17 /FC
/Fa"x64\Release\" /EHsc /nologo /Fo"x64\Release\"
/Fp"x64\Release\oiioTest.pch" /diagnostics:classic
`auto` was `const char*`, therefore did not change a thing.
With the new lines you suggested, the memory error happens at the first str
usage, ie., str.size().
std::cout << "str len " << str.size() << " = '" << str << "'" <<
std::endl; // memory error here
std::string::size_type mark_pos = str.find_first_of("?");
std::cout << "result of find_first_of is " << mark_pos << std::endl;
I tried the local copy with:
std::string str2 = str; // memory error here
std::string::size_type mark_pos2 = str2.find_first_of("?");
std::string::size_type mark_pos = str.find_first_of("?");
The memory error happens at the str2 affectation; str has size 79
(expected), and cannot be read, str2 has size 0, allocated 0.
Not sure where to go next.
Mathieu
Le mer. 24 avr. 2019 à 08:26, Larry Gritz <[email protected]> a écrit :
> Do you know what your "locale" is? Anything unusual?
>
> I'm also wondering about the /D "_UNICODE" /D "UNICODE"
> What happens if you don't do that?
>
> Your line,
>
> auto path =
> "C:/sensomovie/C200/A011C118_19041345_CANON/A011C118_19041345_CANON_00001926.DPX";
>
>
> I wonder if you instead used
>
> const char* path =
> "C:/sensomovie/C200/A011C118_19041345_CANON/A011C118_19041345_CANON_00001926.DPX";
>
> if that changes anything?
>
> The other idea I had is in get_rest_arguments (src/libutil/strutil.cpp),
> could you instrument it like this just to see what happens:
>
> bool
> Strutil::get_rest_arguments(const std::string& str, std::string& base,
> std::map<std::string, std::string>& result)
> {
> std::cout << "str len " << str.size() << " = '" << str << "'" <<
> std::endl;
> std::string::size_type mark_pos = str.find_first_of("?");
> std::cout << "result of find_first_of is " << mark_pos << std::endl;
> ... rest of function as before ...
>
> and see if there is anything interesting printed immediately prior to the
> crash?
>
>
>
> On Apr 23, 2019, at 2:53 PM, Mathieu Prevot <[email protected]>
> wrote:
>
> I use a debug oiio, and release project; in that case I managed to get a
> call stack.
>
> `str` in `bool Strutil::get_rest_arguments(const std::string& str,
> std::string& base, std::map<std::string, std::string>& result)`
> has a problem ("error reading characters of string").
>
> OpenImageIO.dll!OpenImageIO_v2_1::Strutil::get_rest_arguments(const
> std::basic_string<char,std::char_traits<char>,std::allocator<char> > & str,
> std::basic_string<char,std::char_traits<char>,std::allocator<char> > &
> base,
> std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >
> >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char>
> > > > > & result) Line 270 C++
>
> OpenImageIO.dll!OpenImageIO_v2_1::ImageInput::create(const
> std::basic_string<char,std::char_traits<char>,std::allocator<char> > &
> filename, bool do_open, const OpenImageIO_v2_1::ImageSpec * config,
> OpenImageIO_v2_1::string_view plugin_searchpath) Line 512 C++
>
> OpenImageIO.dll!OpenImageIO_v2_1::ImageInput::open(const
> std::basic_string<char,std::char_traits<char>,std::allocator<char> > &
> filename, const OpenImageIO_v2_1::ImageSpec * config) Line 106 C++
> > oiioTest.exe!DPXio::ReadFloat(char *) Line 31 C++
>
> Here my function:
>
> auto DPXio::ReadFloat(const char* filename) -> SparseArray<float>*
> {
> auto in = ImageInput::open(filename);
> if (!in) return nullptr;
>
> auto spec = in->spec();
> DPXfloat.SetSize(spec);
> in->read_image(TypeDesc::FLOAT, DPXfloat.Values);
> in->close();
>
> return &DPXfloat;
> }
>
> and it is called this way:
>
> auto sut = new DPXio();
> auto path =
> "C:/sensomovie/C200/A011C118_19041345_CANON/A011C118_19041345_CANON_00001926.DPX";
> //auto path =
> "C:/sensomovie/C200/A014C203_190414BL_CANON_16bits/A014C203_190414BL_CANON_00001331.DPX";
>
> std::cout << (FileExist(path) ? "File OK: " : "No such file: ") <<
> path << "." << endl;
>
> auto result = sut->ReadFloat(path);
> if (result == nullptr)
> cout << "null result" << endl;
> else
> {
> cout << "colors: " << result->Colors << endl;
> cout << "width: " << result->Width << endl;
> cout << "height: " << result->Height << endl;
> }
>
> The compilation arguments (I'm using VS2019 enterprise, toolset Visual
> Studio 2019 (v142), but I have the same with v141):
>
> /permissive- /Yu"pch.h" /GS /GL /W3 /Gy /Zc:wchar_t
> /I"c:\lib\tiff\include" /I"c:\lib\openexr\include" /I"c:\lib\oiio\include"
> /Zi /Gm- /O2 /sdl /Fd"x64\Release\vc142.pdb" /Zc:inline /fp:precise /D
> "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX-
> /Zc:forScope /Gd /Oi /MD /FC /Fa"x64\Release\" /EHsc /nologo
> /Fo"x64\Release\" /Fp"x64\Release\oiioTest.pch" /diagnostics:classic
>
> M
>
>
> Le mar. 23 avr. 2019 à 23:39, till dechent <[email protected]> a
> écrit :
>
>> Yes I built version 2.0.6 as a release (x64) and it worked. I also tried
>> the DPX you provided and all was good.
>>
>> Am Di., 23. Apr. 2019 um 21:44 Uhr schrieb Mathieu Prevot <
>> [email protected]>:
>>
>>> Please, can those who could open images with `ImageInput::open(filename)`
>>> tell if it was a release or debug build (of their own binary, not
>>> oiio's) ? If it was a debug, can you test with a release build ?
>>>
>>> Many thanks
>>> M
>>>
>>> Le lun. 22 avr. 2019 à 16:35, Mathieu Prevot <[email protected]>
>>> a écrit :
>>>
>>>> Tested with boost 1.68 and 1.70, both are OK with oiio debug, and
>>>> opening the DPX file works correctly in that configuration.
>>>> Only when I build and use oiio *release*, it fails (with both boost
>>>> versions).
>>>>
>>>> I'm not sure where to go to continue the investigation.
>>>>
>>>> For repro, my build script; which needs to be run in the ooio-master
>>>> folder as is. msbuild needs to be in $path.
>>>>
>>>> $target = "Visual Studio 15 2017 Win64"
>>>>
>>>> function configure {
>>>> I:\IntelSWTools\compilers_and_libraries_2019.3.203\windows\tbb\bin\
>>>> tbbvars.bat intel64 vs2017
>>>> cmake.exe -G $target -T v141, host=x64 -j16 `
>>>> -DCMAKE_PREFIX_PATH=
>>>> "I:/lib/tiff;I:\lib\boost-1.70;I:/lib/zlib;I:/lib/libpng;I:/lib/openexr;I:/lib/libjpegturbo"
>>>> `
>>>> -DTBB_ROOT_DIR=
>>>> "I:/IntelSWTools/compilers_and_libraries/windows/tbb" `
>>>> -DCMAKE_INSTALL_PREFIX="I:/lib/oiio-release" `
>>>> -DJPEGTURBO_PATH="i:/lib/libjpegturbo" `
>>>> -DUSE_QT=0 -DOIIO_BUILD_TESTS=1 -DUSE_PYTHON=0 `
>>>> -DPYTHON_EXECUTABLE="I:/intelpython2/python.exe" `
>>>> ..
>>>> }
>>>>
>>>> function build {
>>>> #"build oiio debug"
>>>> #MSBuild.exe OpenImageIO.sln /verbosity:m /m
>>>> "build oiio release"
>>>> MSBuild.exe OpenImageIO.sln /p:Configuration=Release /verbosity:m /
>>>> m
>>>> }
>>>>
>>>> function install {
>>>> #"install oiio debug"
>>>> #MSBuild.exe INSTALL.vcxproj /verbosity:m /m
>>>> "install oiio release"
>>>> MSBuild.exe INSTALL.vcxproj /p:Configuration=Release /verbosity:m /
>>>> m
>>>> }
>>>>
>>>> function clean {
>>>> if (test-path build) {
>>>> remove-item -recurse -force build
>>>> }
>>>> New-Item -ItemType Directory build
>>>> }
>>>>
>>>> clean
>>>> Set-Location build
>>>> configure
>>>> build
>>>> install
>>>> Set-Location ..
>>>>
>>>>
>>>> Regards
>>>> M
>>>>
>>>>
>>>>
>>>> Le sam. 20 avr. 2019 à 19:10, Larry Gritz <[email protected]> a écrit :
>>>>
>>>>> I'm not sure what else I can do unless I either have a case I can
>>>>> reproduce on my end, or a more full stack trace or at least indication of
>>>>> what specific line in the OIIO is where the exception is thrown (just
>>>>> knowing precisely where the crash happens may be enough do diagnose or
>>>>> defensively program around).
>>>>>
>>>>>
>>>>> On Apr 19, 2019, at 2:11 AM, till dechent <[email protected]>
>>>>> wrote:
>>>>>
>>>>> ImageInput::open() works for me with the downloaded DPX on version
>>>>> 2.0.6.
>>>>>
>>>>> Am Do., 18. Apr. 2019 um 18:41 Uhr schrieb Stephen Blair <
>>>>> [email protected]>:
>>>>>
>>>>>> It doesn't crash on Windows for me, but that's
>>>>>> with OpenImageIO-Arnold 2.1.0dev
>>>>>>
>>>>>> On Thu, Apr 18, 2019 at 1:07 PM Larry Gritz <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi, thanks. I'm able to open that DPX file on my end (not on
>>>>>>> Windows), so I don't think it's a corrupt file.
>>>>>>>
>>>>>>> Can you build all of OIIO in Debug mode (not Release) and use the
>>>>>>> debugger to find out what file and line is where the actual crash is
>>>>>>> occurring? The screenshot you provided only shows where in your unit
>>>>>>> test
>>>>>>> it was, so the actual crash could be practically anywhere inside what
>>>>>>> happens within the open() call.
>>>>>>>
>>>>>>> I'm sorry I'm not easily able to help, I don't have access to a
>>>>>>> Windows machine.
>>>>>>>
>>>>>>> Can somebody else out there who uses OIIO on Windows please do us a
>>>>>>> favor and download this DPX file in the links below, then try anything
>>>>>>> that
>>>>>>> forces an open (e.g., 'iinfo -v -stats blah.dpx') and report what
>>>>>>> happens?
>>>>>>> Does this crash for everybody? If anyone can reproduce, do you have any
>>>>>>> ideas or can you get closer to finding what line within the OIIO code is
>>>>>>> the source of the problem?
>>>>>>>
>>>>>>> -- lg
>>>>>>>
>>>>>>>
>>>>>>> On Apr 18, 2019, at 1:16 AM, Mathieu Prevot <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>> Hello,
>>>>>>>
>>>>>>> Following the documentation "4.1 Image Input Made Simple";
>>>>>>> I'm having an exception at opening a dpx file and tiff file from
>>>>>>> simple code:
>>>>>>>
>>>>>>> auto in = ImageInput::open(filename); // here
>>>>>>> if (!in) return;
>>>>>>>
>>>>>>> Exception thrown at 0x00007FFDBEBDA388 in testhost.exe: Microsoft
>>>>>>> C++ exception:
>>>>>>> Microsoft::VisualStudio::CppUnitTestFramework::CSEException
>>>>>>>
>>>>>>> More detailed information:
>>>>>>> https://1drv.ms/u/s!AlUmbfQiLoTZhFQir--TvMglJ0iT
>>>>>>>
>>>>>>> Images:
>>>>>>> https://1drv.ms/f/s!AlUmbfQiLoTZhFKpXHJcchpi0hBY
>>>>>>>
>>>>>>> I'm using the master version of oiio in windows with tiff 4.0.10,
>>>>>>> openexr 2.3.0, zlib 1.2.11, libpng 1.6.35, boost 1.70, libjpegturbo
>>>>>>> 2.0.3,
>>>>>>> tbb 2019.3; cmake 3.13.4, VS2017.
>>>>>>>
>>>>>>> I'm running this in a c++ unit test, (with some c code since data
>>>>>>> will be used in an interop context).
>>>>>>>
>>>>>>> TEST_CLASS(DPXioTests)
>>>>>>> {
>>>>>>> public:
>>>>>>> TEST_METHOD(Instance)
>>>>>>> {
>>>>>>> auto sut = new DPXio();
>>>>>>> Assert::IsNotNull(sut);
>>>>>>> }
>>>>>>>
>>>>>>> TEST_METHOD(ReadDPX)
>>>>>>> {
>>>>>>> auto sut = new DPXio();
>>>>>>> auto path =
>>>>>>> "C:/sensomovie/C200/A011C118_19041345_CANON/A011C118_19041345_CANON_00001926.DPX";
>>>>>>> if(!FileExist(path))
>>>>>>> {
>>>>>>> wstringstream s;
>>>>>>> s << "No such file: " << path << ".";
>>>>>>> Logger::WriteMessage(s.str().c_str());
>>>>>>> return;
>>>>>>> }
>>>>>>> try
>>>>>>> {
>>>>>>> auto result = sut->Read(path);
>>>>>>> Assert::IsNotNull(result);
>>>>>>> Assert::IsTrue(result->Colors >= 3);
>>>>>>> Assert::IsTrue(result->Height == 2160);
>>>>>>> Assert::IsTrue(result->Width == 4096);
>>>>>>> }
>>>>>>> catch (Exception& e)
>>>>>>> {
>>>>>>> auto lastErrorID = GetLastError();
>>>>>>> if (lastErrorID != 0)
>>>>>>> {
>>>>>>> LPVOID errorBuffer{};
>>>>>>> FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
>>>>>>> FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
>>>>>>> nullptr, lastErrorID,
>>>>>>> MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&errorBuffer, 0,
>>>>>>> nullptr);
>>>>>>> wstringstream s;
>>>>>>> s << "Exception: " << e.what() << ". ID: "<<
>>>>>>> lastErrorID << ". Message: " << errorBuffer<< ".";
>>>>>>> Logger::WriteMessage(s.str().c_str());
>>>>>>> }
>>>>>>> else
>>>>>>> {
>>>>>>> wstringstream s;
>>>>>>> s << "Exception: " << e.what();
>>>>>>> Logger::WriteMessage(s.str().c_str());
>>>>>>> }
>>>>>>> }
>>>>>>> }
>>>>>>> };
>>>>>>>
>>>>>>>
>>>>>>> Mathieu
>>>>>>> _______________________________________________
>>>>>>> Oiio-dev mailing list
>>>>>>> [email protected]
>>>>>>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Larry Gritz
>>>>>>> [email protected]
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Oiio-dev mailing list
>>>>>>> [email protected]
>>>>>>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>>>>>>
>>>>>> _______________________________________________
>>>>>> Oiio-dev mailing list
>>>>>> [email protected]
>>>>>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>>>>>
>>>>> _______________________________________________
>>>>> Oiio-dev mailing list
>>>>> [email protected]
>>>>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>>>>
>>>>>
>>>>> --
>>>>> Larry Gritz
>>>>> [email protected]
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Oiio-dev mailing list
>>>>> [email protected]
>>>>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>>>>
>>>> _______________________________________________
>>> Oiio-dev mailing list
>>> [email protected]
>>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>>
>> _______________________________________________
>> Oiio-dev mailing list
>> [email protected]
>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>
> _______________________________________________
> Oiio-dev mailing list
> [email protected]
> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>
>
> --
> Larry Gritz
> [email protected]
>
>
>
>
> _______________________________________________
> Oiio-dev mailing list
> [email protected]
> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>
_______________________________________________
Oiio-dev mailing list
[email protected]
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org