Many thanks for this Even. 

I've built and been testing the branch with the `tostring` exe. The good (?) 
news is that the issue occurs with this also - so at lease that rules out 
Python and SWIG. 

In MSVC the default optimization for release is /02. If this is changed to /O1 
it works. 

It also appears you can create PDB debug files for release versions. These 
don't allow me to step through in a debugger, but it did provide a stack trace. 

Exception thrown at 0x00007FFB306F6CF1 (ucrtbase.dll) in tostring.exe: 
0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.

ucrtbase.dll!strnlen()  Unknown
ucrtbase.dll!__crt_stdio_output::output_processor<char,__crt_stdio_output::string_output_adapter<char>,__crt_stdio_output::standard_base<char,__crt_stdio_output::string_output_adapter<char>>>::type_case_s()
  Unknown
ucrtbase.dll!__crt_stdio_output::output_processor<char,__crt_stdio_output::string_output_adapter<char>,__crt_stdio_output::standard_base<char,__crt_stdio_output::string_output_adapter<char>>>::state_case_type()
      Unknown
ucrtbase.dll!__crt_stdio_output::output_processor<char,__crt_stdio_output::string_output_adapter<char>,__crt_stdio_output::standard_base<char,__crt_stdio_output::string_output_adapter<char>>>::process()
      Unknown
ucrtbase.dll!common_vsprintf<__crt_stdio_output::standard_base,char>()  Unknown
mapserver.dll!msIO_vfprintf()   C
mapserver.dll!msIO_fprintf()    C
mapserver.dll!resetClassStyle() C
mapserver.dll!resetClassStyle() C
mapserver.dll!resetClassStyle() C
mapserver.dll!msWriteMapToString()      C
tostring.exe!main()     C
[Inline Frame] tostring.exe!invoke_main() Line 78       C++
tostring.exe!__scrt_common_main_seh() Line 288  C++
kernel32.dll!BaseThreadInitThunk()      Unknown
ntdll.dll!RtlUserThreadStart()  Unknown

Interestingly, if I go back to a debug build and step through with a debugger 
`resetClassStyle` is never called..
It looks like it is trying to print out a NULL string, but how this is created 
I've not been able to find.

Seth


--
web:https://geographika.net
twitter: @geographika

On Sun, Oct 16, 2022, at 1:49 PM, Even Rouault wrote:
> Seth,
>
> Several things:
>
> - there used to be a time where you couldn't safely mix code built with 
> different versions of Visual Studio, but this was relaxed since VS 2015 
> (https://learn.microsoft.com/en-us/cpp/porting/binary-compat-2015-2017?view=msvc-170),
>  
> and anyway apparently this isn't the case here, given release-190-x64 
> is 
> built with VS2022. The only thing however is that your Python binary is 
> likely not built with VS2022. But thinking of GDAL, we have the same 
> situation and a Windows CI setup with VS2022, and things work well.
>
> - you could potentially try https://github.com/dynamorio/drmemory which 
> is an equivalent of Valgrind, that runs on Windows.
>
> - It is strange that you get different behaviour with Release vs 
> RelWithDebInfo. Perhaps RelWithDebInfo generates a binary with slightly 
> lower optimization level. This is the case with gcc where RelWithDebInfo 
> is -O2 whereas Release is -O3. I couldn't quickly find info on that for 
> MSVC, but might be something to investigate
>
> - all the fuzzing fixes are about error code paths, not regular code 
> triggered by a nominal sane mapfile.
>
> - we can never exclude compiler bugs, and that's quite a headache to 
> spot them and reduce to a simpler reproducer. But it could also be that 
> VS2022 optimizes something more greedily on a part of the code that may 
> rely on some undefined behavior. C/C++ has many undefined behaviours, 
> and compilers may decide to do different things, and sometimes crazy 
> things, on code with such undefined behaviour. it could also be a memory 
> corruption whose effects manifest themselves later in weird ways.
>
> - it could indeed be interesting to check if you can reproduce the 
> issue 
> outside of a python context, for example with 
> https://github.com/rouault/mapserver/commit/9d64dc65461c4df30da0f9170de4300331a6d173
>  
> ("tostring" branch of https://github.com/rouault/mapserver/)
>
> Even
>
> Le 16/10/2022 à 11:07, Seth G a écrit :
>> Hi all,
>>
>> I've been trying to get MapScript for Python working for MapServer 8.0 using 
>> Visual Studio 2022 and the release-1930-x64 SDK from GISInternals- see issue 
>> https://github.com/MapServer/MapServer/issues/6628
>>
>> In summary, whenever you try and save a Mapfile to a file in Python (all 
>> versions from 2.7 to 3.10 are affected) there is a "Windows fatal exception: 
>> access violation".
>>
>> Note, everything builds fine when using Visual Studio 2019 (and the 
>> release-1928-x64 SDK) with the same MapServer code.
>>
>> The worst thing is that when running a DEBUG version of the code - 
>> everything works fine. The exception only works in RELEASE version, which 
>> means my "debugging" involves modifying code, recompiling and rerunning.
>>
>> The fact it doesn't work in RELEASE version strongly implies that VS2022 is 
>> doing some optimization which causes the issue. I'm not sure how best to 
>> progress this, and hoping someone on the list may have some ideas.
>>
>> - With each of the fuzzing fixes, I've been hoping the issue will be 
>> resolved. Could it be the case that memory is getting corrupted and causing 
>> the issue?
>> - Is it likely the cause is a bug in the MapServer code which causes 
>> something to be optimized away that shouldn't be?
>> - Is there any chance there is a bug in VS2022 itself rather than anything 
>> in MapServer?
>> - Commenting out various parts of `writeWeb, and `writeFeature` get things 
>> working again, but there seems to be no logic to this - e.g. commenting out 
>> half of the `writeLayer` means it works again (with no changes to 
>> `writeWeb`), but commenting out a single line in `writeWeb` also gets it 
>> working, removing parts of `writeFeature` also works, a Mapfile with one 
>> LAYER works one with 2 LAYERS doesn't..
>> - the `writeMapToString` [1] is only called using MapScript. Would it be 
>> worth adding an option to map2img to dump out an input Mapfile to test this 
>> without any MapScript?
>>
>> Thanks for any input!
>>
>> Seth
>>
>>
>> [1] 
>> https://github.com/MapServer/MapServer/blob/e5a53178b056f0da83ec8e5a2e0412a50d0ca3a6/mapfile.c#L5904
>>
>> --
>> web:https://geographika.net
>> twitter: @geographika
>> _______________________________________________
>> MapServer-dev mailing list
>> [email protected]
>> https://lists.osgeo.org/mailman/listinfo/mapserver-dev
>
> -- 
> http://www.spatialys.com
> My software is free, but my time generally not.
_______________________________________________
MapServer-dev mailing list
[email protected]
https://lists.osgeo.org/mailman/listinfo/mapserver-dev

Reply via email to