Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. qputenv() with Cyrllic string on WIndows results in 0xc0000409 abort.

qputenv() with Cyrllic string on WIndows results in 0xc0000409 abort.

Scheduled Pinned Locked Moved Solved General and Desktop
2 Posts 1 Posters 134 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • PerdrixP Offline
    PerdrixP Offline
    Perdrix
    wrote on last edited by
    #1

    Code that reads:

    		//
    		// Set the trace file location
    		//
    		qputenv("Z_TRACEFILE", file.generic_string().c_str());
    

    where file is a std::filesystem::path object results in a 0xc0000409 abend:

    EXCEPTION_RECORD:  (.exr -1)
    ExceptionAdd
    ress: 00007ffc83c64ace (ucrtbase!abort+0x000000000000004e)
       ExceptionCode: c0000409 (Security check failure or stack buffer overrun)
      ExceptionFlags: 00000001
    NumberParameters: 1
       Parameter[0]: 0000000000000007
    Subcode: 0x7 FAST_FAIL_FATAL_APP_EXIT 
    
    PROCESS_NAME:  DeepSkyStacker.exe
    
    ERROR_CODE: (NTSTATUS) 0xc0000409 - The system detected an overrun of a stack-based buffer in this application. This overrun could potentially allow a malicious user to gain control of this application.
    
    EXCEPTION_CODE_STR:  c0000409
    
    EXCEPTION_PARAMETER1:  0000000000000007
    
    STACK_TEXT:  
    00000000`0014e7f0 00007ffc`83c819de     : 00000000`00000003 00000001`00000003 00000001`40000000 01000000`00000080 : ucrtbase!abort+0x4e
    00000000`0014e820 00000001`408c82ce     : 00000000`00000000 00000000`ffffffff 00000000`0014eff0 00000000`00000000 : ucrtbase!terminate+0x1e
    00000000`0014e850 00007ffc`834b6fd3     : 00000000`00000000 00000000`00000000 00000000`0014ff90 00000000`00000000 : DeepSkyStacker!__scrt_unhandled_exception_filter+0x62
    00000000`0014e880 00007ffc`860aa723     : 00007ffc`860ee064 00007ffc`860ee070 00000000`00000000 00000000`00000000 : KERNELBASE!UnhandledExceptionFilter+0x1f3
    00000000`0014e970 00007ffc`86061b73     : 00000000`0014ff90 00007ffc`8611c144 00000000`0014eaa0 00000000`00000000 : ntdll!RtlUserThreadStart$filt$0+0x3f
    00000000`0014e9a0 00007ffc`860a640f     : 00000000`0014fa10 00000000`0014efa0 00000000`00000000 00007ffc`85fcc53c : ntdll!_C_specific_handler+0x93
    00000000`0014ea10 00007ffc`85f52327     : 00000000`0014fa10 00007ffc`85f40000 00007ffc`85fcc53c 00007ffc`8611c144 : ntdll!RtlpExecuteHandlerForException+0xf
    00000000`0014ea40 00007ffc`85f4a961     : 00000000`00000000 00000000`0014f8c0 00000000`00000000 00000000`0014fa10 : ntdll!RtlDispatchException+0x437
    00000000`0014f190 00007ffc`8346804a     : 00000000`0014fec0 00000000`0014fb18 00000000`00000001 00000000`e06d7363 : ntdll!RtlRaiseException+0x221
    00000000`0014f9f0 00007ffc`67c452c7     : 00000000`00000000 00000000`01c00000 00000000`08f84fb0 00000000`08f7af01 : KERNELBASE!RaiseException+0x8a
    00000000`0014faf0 00000001`400953f8     : 00000000`00000000 00000001`4089b483 00000000`0014fde0 00000000`00000052 : VCRUNTIME140!_CxxThrowException+0x97
    00000000`0014fb50 00000001`40125abf     : 00000000`00000001 00000000`00000000 00000000`00000052 00000000`00000020 : DeepSkyStacker!std::_Throw_system_error_from_std_win_error+0x38
    (Inline Function) --------`--------     : --------`-------- --------`-------- --------`-------- --------`-------- : DeepSkyStacker!std::_Check_convert_result+0x6f
    00000000`0014fbd0 00000001`401259b7     : 00000000`0014fde0 00000000`0014fcc0 00000000`0014fd50 00000000`00000000 : DeepSkyStacker!std::_Convert_wide_to_narrow<std::char_traits<char>,std::allocator<char> >+0xdf
    00000000`0014fc30 00000001`4012a3d1     : 00000001`40deaa58 00000000`0014fde0 00000000`00000000 00000001`40deaa58 : DeepSkyStacker!std::filesystem::_Convert_wide_to<std::char_traits<char>,std::allocator<char>,char>+0x37
    00000000`0014fc80 00000001`40266d6e     : 00000000`00000000 00000000`00000000 00000000`08f47fe0 00000000`0014fe20 : DeepSkyStacker!std::filesystem::path::generic_string<char,std::char_traits<char>,std::allocator<char>,0>+0x131
    (Inline Function) --------`--------     : --------`-------- --------`-------- --------`-------- --------`-------- : DeepSkyStacker!std::filesystem::path::generic_string+0x11
    00000000`0014fd20 00000001`4005eeb0     : 00000000`00000000 00000001`4094b420 00000001`4094b420 00000000`00000000 : DeepSkyStacker!DSS::TraceControl::TraceControl+0x5ae
    00000000`0014fea0 00007ffc`83c2e716     : 00000001`4094b380 00000000`00000000 00000000`00000000 00000000`00000000 : DeepSkyStacker!`dynamic initializer for 'traceControl''+0x40
    00000000`0014fef0 00000001`408c724c     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ucrtbase!initterm+0x36
    00000000`0014ff20 00007ffc`859fe8d7     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : DeepSkyStacker!__scrt_common_main_seh+0x7c
    00000000`0014ff60 00007ffc`85fcc53c     : 00000000`00000000 00000000`00000000 000004f0`fffffb30 000004d0`fffffb30 : kernel32!BaseThreadInitThunk+0x17
    00000000`0014ff90 00000000`00000000     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x2c
    

    I think I need to change the above to read:

    		//
    		// Set the trace file location
    		//
    		qputenv("Z_TRACEFILE", file.generic_u8string().c_str());
    

    I can't build my code at present (vcpkg issue) which is why I'm asking, rather than just trying it!

    Thanks, David

    1 Reply Last reply
    0
    • PerdrixP Offline
      PerdrixP Offline
      Perdrix
      wrote on last edited by Perdrix
      #2

      Here's how I fixed the problem:

      #if defined(Q_OS_WIN)
      		// Set the C character locale to UTF-8 (used to be in DeepSkyStacker.cpp and friends)
      		std::setlocale(LC_CTYPE, ".UTF-8");
      
      		// Set console code page to UTF-8 so console knows how to interpret string data
      		SetConsoleOutputCP(CP_UTF8);
      #endif
      
      		//
      		// Set the trace file location
      		//
      		QByteArray nameArray{ reinterpret_cast<const char*>(file.generic_u8string().c_str()) };
      		qputenv("Z_TRACEFILE", nameArray);
      
      1 Reply Last reply
      1
      • PerdrixP Perdrix has marked this topic as solved on

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved