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.
Forum Updated to NodeBB v4.3 + New Features

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

Scheduled Pinned Locked Moved Solved General and Desktop
2 Posts 1 Posters 24 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 Online
    PerdrixP Online
    Perdrix
    wrote 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 Online
      PerdrixP Online
      Perdrix
      wrote 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
      0
      • PerdrixP Perdrix has marked this topic as solved

      • Login

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